设计模式:创建型模式之单例模式
2013-10-04 02:35
204 查看
创建型模式(Creational Pattern)
对类的实例化过程的抽象化,提供对象的创建和管理职责。
创建型模式:
①单例模式
②工厂方法模式
③抽象工厂模式
④建造者模式
⑤原型模式
在Java中,单例模式的实现表现形式有:①饿汉式单例类:类加载,对象实例化;②懒汉式单例类:引用时即对象实例化。
看看恶汉式单例类的代码:
public class Singleton{
private static Singleton m_instance = new Singleton(); //让外界无法直接实例化 private Singleton(){ } //获取实例对象 public static Singleton getInstance(){ return m_instance; } }
可以看出,类加载时,静态变量m_instance会被初始化,外部也无法直接创建Singleton对象,只能直接调用它的静态方法getInstance来得到其对象。这就实现了一个类被加载时,对象也就创建出来了,并且只有一个!
看看懒汉式单例类的代码:
public class Singleton{
private static Singleton _instance = null;
//让外界无法直接实例化
private Singleton(){
}
//同步,多线程下只能创建一个实例
synchronized public static Singleton getInstance(){
if(_instance == null){
_instance = new Singleton();
}
return _instance;
}
}
可以看出,懒汉式使用多线程环境下synchronized,这样每次只能实例化一个对象。
饿汉式与懒汉式的区别:
①:饿汉式是加载时实例花,懒汉式是引用时实例化;
②:饿汉式资源利用率较差,反应时间和和速度较好;
③:饿汉式易在java中实现,不易在c++中实现。
单例模式的优点:
①:减少内存开支;
②:减少系统性能开销;
③:避免对资源的多重占用;
④:优化和共享资源访问。
缺点:;
①:无法创建子类,扩展困难;
②:对测试不利;
③:单例模式与单一职责原则冲突。
什么时候使用单例模式?
a.要求生成唯一序列号的环境;
b.在项目中需要一个共享访问点或共享数据;
c.创建一个对象需要消耗的资源过多(IO、数据库);
d.需要大量定义静态常量和静态方法的环境。
对类的实例化过程的抽象化,提供对象的创建和管理职责。
创建型模式:
①单例模式
②工厂方法模式
③抽象工厂模式
④建造者模式
⑤原型模式
在Java中,单例模式的实现表现形式有:①饿汉式单例类:类加载,对象实例化;②懒汉式单例类:引用时即对象实例化。
看看恶汉式单例类的代码:
public class Singleton{
private static Singleton m_instance = new Singleton(); //让外界无法直接实例化 private Singleton(){ } //获取实例对象 public static Singleton getInstance(){ return m_instance; } }
可以看出,类加载时,静态变量m_instance会被初始化,外部也无法直接创建Singleton对象,只能直接调用它的静态方法getInstance来得到其对象。这就实现了一个类被加载时,对象也就创建出来了,并且只有一个!
看看懒汉式单例类的代码:
public class Singleton{
private static Singleton _instance = null;
//让外界无法直接实例化
private Singleton(){
}
//同步,多线程下只能创建一个实例
synchronized public static Singleton getInstance(){
if(_instance == null){
_instance = new Singleton();
}
return _instance;
}
}
可以看出,懒汉式使用多线程环境下synchronized,这样每次只能实例化一个对象。
饿汉式与懒汉式的区别:
①:饿汉式是加载时实例花,懒汉式是引用时实例化;
②:饿汉式资源利用率较差,反应时间和和速度较好;
③:饿汉式易在java中实现,不易在c++中实现。
单例模式的优点:
①:减少内存开支;
②:减少系统性能开销;
③:避免对资源的多重占用;
④:优化和共享资源访问。
缺点:;
①:无法创建子类,扩展困难;
②:对测试不利;
③:单例模式与单一职责原则冲突。
什么时候使用单例模式?
a.要求生成唯一序列号的环境;
b.在项目中需要一个共享访问点或共享数据;
c.创建一个对象需要消耗的资源过多(IO、数据库);
d.需要大量定义静态常量和静态方法的环境。
相关文章推荐
- Java常用的设计模式02:常用设计模式之工厂模式(创建型模式)
- 设计模式单件(Singleton)---对象创建型模式
- 设计模式总结之创建型设计模式
- 设计模式——创建型——原型模式
- 【设计模式基础】创建型模式 - 总结
- 23种设计模式(4)_创建型_建造者模式(Builder Pattern)
- JAVA基础(五)工厂模式及其他创建型设计模式总结
- 设计模式(一):创建型模式
- 二十三种设计模式之创建型模式之工厂方法
- 设计模式之——创建型模式
- 二十三种设计模式之创建型模式之建造者模式
- 设计模式之创建型模式
- 第六篇、创建型设计模式——建造者(Builder)模式/生成器模式
- Python的创建型设计模式之建造者模式
- 设计模式分类(创建型模式、结构型模式、行为模式)
- 设计模式-创建型-Factory Method(工厂方法)
- [设计模式笔记]一. 创建型模式--4.Builder模式(一)
- Java开发中的23个设计模式--第一部分:创建型模式
- 设计模式学习之工厂方法(Factory Method,创建型模式)(2)
- JAVA设计模式(02):创建型-抽象工厂模式(Abstract Factory)