单例模式
来源:互联网 发布:mega6.0软件下载 编辑:程序博客网 时间:2024/06/06 17:35
package DesignPatterns;/** * 优点: * 1:由于单例模式在内存中只有一个实例,减少了内存的开支,特别是一个对象需要频繁的创建、销毁 * 而且创建或者销毁时性能又无法优化,单例模式的优势就非常的明显 * 2:由于单例模式只能生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资 * 源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后 * 永久驻留内存的方式来解决 * 3: 单例模式可以避免对资源的多重占用。(例如一个学文件动作,由于只要一个实例存在内存中,避 * 免对同一资源文件的同时写操作。) * 4:单利模式可以在系统设置全局的访问点,优化和共享资源访问。 * * 缺点: * 1:单利一般没有接口,扩展很困难,若要扩展,除了修改代码基本上没有第二种途径可以实现, * 2:单例模式对测试很不利的。 * 3:单例模式与单一职责原则有冲突。 * * *///单利模式通用代码(饿汉式单例) (不会出现产生多个实例的情况)public class SingletonPattern {private static final SingletonPattern _single=new SingletonPattern();private SingletonPattern() {}public static SingletonPattern getInstance(){return _single;}public void DoSomething(){System.out.println("-----单利模式通用代码 .");}}//线程不安全的单利class SingletonPatternTwo{/** * 解决线程不安全的方法很多,可以在getInstance方法前加synchronized关键字,也可以在 * getInstance方法内增加synchronized来实现(增加synchronized的单例模式称为懒汉式单例),但都不是很优秀的单例模式。 * */private static SingletonPatternTwo _single=null;private SingletonPatternTwo(){}//public static synchronized SingletonPatternTwo getInstance() 解决线程不安全public static SingletonPatternTwo getInstance() {if(_single==null){_single=new SingletonPatternTwo();}return _single;}public void DoSomething(){System.out.println("-----线程不安全的单利 .");}}//静态内部类单例模式写法class SingletonPatternThree{private static class SingletonHolder{private static final SingletonPatternThree INSTANCE=new SingletonPatternThree();}private SingletonPatternThree(){}public static SingletonPatternThree getInstance() {return SingletonHolder.INSTANCE;}public void DoSomething(){System.out.println("-----静态内部类单例模式写法 .");}}
阅读全文
0 0
- 单例、单例模式
- 单例模式-多线程单例模式
- 单件模式(单例模式)
- 设计模式------单例模式
- 设计模式------单例模式
- 设计模式-单例模式
- 设计模式 - 单例模式
- 设计模式---单例模式
- 设计模式---单例模式
- PHP模式-单例模式
- 【设计模式】单例模式
- 设计模式-单例模式
- 设计模式----单例模式
- 设计模式--单例模式
- 设计模式-单例模式
- 单例模式(单子模式)
- 设计模式-单例模式
- [设计模式] 单例模式
- iOS iPhone X的StatusBar 高度
- SQL查询的艺术学习笔记--简单查询
- Linux创建swap文件
- 数据库设计到底要不要保留物理上的外键
- String 截取字符串
- 单例模式
- poj 1743 Musical Theme (二分+后缀数组)
- jstack线程dump输出状态解释
- JMM
- spring boot html调用js无效400解决办法
- TCP UDP 面向网络编程
- Lambda表达式select()和where()的区别
- MySQL数据库入门学习
- 自动化运维,让你远离背锅侠