设计模式笔记--单例模式
来源:互联网 发布:办公室网络架构 编辑:程序博客网 时间:2024/06/06 09:32
常用设计模式有23中,分为:
创建型模式(主要用于创建对象)
1、单例模式 2、工厂方法模式 3、抽象工厂模式 4、建造者模式 5、原型模式行为型模式 (主要用于描述对象或类是怎样交互和怎样分配职责)
1、模板方法模式 2、中介者模式 3、命令模式 4、责任链模式 5、策略模式 6、迭代器模式
7、观察者模式 8、备忘录模式 9、访问者模式 10、状态模式 11、解释器模式结构型模式(主要用于处理类或对象的组合)
1、代理模式 2、装饰模式 3、适配器模式 4、组合模式 5、外观模式(门面模式) 6、享元模式 7、桥梁模式单例模式
单例模式(Singleton Pattern)是一个比较简单的模式,其定义如下:
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
Singleton类称为单例类,通过使用private的构造函数确保了在一个应用中只产生一个实例,并且是自行实例化的(在Singleton中自己使用new Singleton())。
单例模式通用代码 :
public class Singleton {
private static final Singleton singleton = new Singleton();
//限制产生多个对象
private Singleton(){
}
//通过该方法获得实例对象
public static Singleton getSingleton(){
return singleton;
}
//类中其他方法,尽量是static
public static void doSomething(){
}
}
单例模式的使用场景
在一个系统中,要求一个类有且仅有一个对象,如果出现多个对象就会出现“不良反应”,可以采用单例模式.
具体的场景如下:
● 要求生成唯一序列号的环境;
● 在整个项目中需要一个共享访问点或共享数据,例如一个Web页面上的计数器,使用单例模式保持计数器的值,并确保是线程安全的;
● 创建一个对象需要消耗的资源过多,如要访问IO和数据库等资源;
● 需要定义大量的静态常量和静态方法(如工具类)的环境,可以采用单例模式(当然,也可以直接声明为static的方式)。
注意事项
首先,在高并发情况下,请注意单例模式的线程同步问题
其次,需要考虑对象的复制情况 ( 单例类不要实现Cloneable接口 )
有上限的多例模式
需要产生固定数量对象的模式就叫做有上限的多例模式,它是单例模式的一种扩展.
采用有上限的多例模式,我们可以在设计时决定在内存中有多少个实例,方便系统进行扩展,修正单例可能存在的性能问题,提供系统的响应速度。例如读取文件,我们可以在系统启动时完成初始化工作,在内存中启动固定数量的reader实例,然后在需要读取文件时就可以快速响应。
Android中的单例:
public final class InputMethodManager { static final Object mInstanceSync = new Object();//同步 //内部全局唯一实例 static InputMethodManager mInstance; //对外api static public InputMethodManager getInstance(Context context) { return getInstance(context.getMainLooper()); } /** * 内部api,供上面的外部api调用 * @hide 系统隐藏的api */ static public InputMethodManager getInstance(Looper mainLooper) { synchronized (mInstanceSync) { if (mInstance != null) { return mInstance; } IBinder b = ServiceManager.getService(Context.INPUT_METHOD_SERVICE); IInputMethodManager service = IInputMethodManager.Stub.asInterface(b); mInstance = new InputMethodManager(service, mainLooper); } return mInstance; }}
注意:这段代码中getInstance方法中使用了synchronized关键字, 用来解决线程不安全问题,
有的书上把示例中增加了synchronized的单例称为懒汉式单例,把通用代码中没有使用synchronized的方法叫做饿汉式单例。建议在实际使用中使用饿汉式单例模式。
0 0
- 单例设计模式笔记
- 单例设计模式笔记
- 《大话设计模式》--笔记(单例模式)
- 设计模式--单例模式【自学笔记】
- 【笔记】设计模式 - 1 单例模式
- 设计模式笔记之---单例模式
- 设计模式学习笔记:单例模式
- 设计模式学习笔记-单例模式
- 设计模式笔记之单例模式
- php设计模式笔记:单例模式
- 设计模式笔记-单例模式
- 设计模式 笔记 单例模式 Singleton
- 设计模式学习笔记--单例模式
- 设计模式学习笔记-单例模式
- 设计模式笔记--单例模式
- 设计模式学习笔记-单例模式
- 设计模式笔记:单例模式
- 设计模式笔记-单例模式
- 显著性检测算法学习阶段论文总结(2)
- MATLAB中文件的读写和数据的导入导出
- 在展厅设计中运用多媒体技术-数字沙盘
- YTU 2913: 距离产生美
- Storm-Kafka源代码解析
- 设计模式笔记--单例模式
- hibernate4获取SessionFactory
- Mac安装Homebrew
- NIO与IO的区别
- 源码编译
- 【Redis笔记(一)】 环境配置
- linux安装oracle
- windows录音程序原理
- iOS开发页面跳转