GOF二十三种设计模式之单例模式
2017-05-10 00:00
211 查看
在GOF二十三种设计模式中,又进一步分为创建型模式、结构型模式、行为型模式三种,每一种下又分为不同的模式,分类列举如下:
创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
单例模式:顾名思义,就是一个实例,保证一个类只有一个具体化的实例,去完成一定的工作,提供一个可供访问该实例的全局访问点,例如Windows操作系统下的回收站就是一个典型的单例。下边介绍单例模式的几种实现方式:
1.饿汉式实现:
public class SingletonDemo02 {
//类初始化时,立即加载这个对象(没有延时加载的优势).加载类是天然的线程安全
private static SingletonDemo02 instance = new SingletonDemo02();
private SingletonDemo02(){//私有化构造器
}
//方法没有同步,调用效率高
public static SingletonDemo02 getInstance(){
return instance;
}
2.懒汉式实现:
public class SingletonDemo01 {
//类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
private static SingletonDemo01 instance;
private SingletonDemo01(){//私有化构造器
}
//方法同步,调用效率低
public static synchronized SingletonDemo01 getInstance(){
if(instance==null){
instance = new SingletonDemo01();
}
return instance;
}
}
3.双重检测锁式实现:
public class SingletonDemo03 {
private static SingletonDemo03 instance = null;
public static SingletonDemo03 getInstance(){
if(instance==null){
SingletonDemo03 sc;
synchronized (SingletonDemo03.class) {
sc = instance;
if(sc == null){
synchronized (SingletonDemo03.class) {
if(sc==null){
sc = new SingletonDemo03();
}
}
instance = sc;
}
}
}
return instance;
}
private SingletonDemo03(){
}
}
4.静态内部类实现:
public class SingletonDemo04 {
private static class SingletonClassInstance{
private static final SingletonDemo04 instance = new SingletonDemo04();
}
private SingletonDemo04(){
}
//方法没有同步,调用效率高
public static SingletonDemo04 getInstance(){
return SingletonClassInstance.instance;
}
}
5.枚举式实现:
public enum SingletonDemo05 {
//这个枚举元素,本身就是单例对象
INSTANCE;
//添加自己需要的操作
public void SingletonOperation(){
}
}
分析:在饿汉式实现时,假若此类一直不曾被调用,资源就会遭到浪费,在懒汉式实现时,解决了这个问题,但是每次都要加上线程锁,确保当某线程获取到此资源时,不被其他线程抢占,造成不可预知的错误,这样,很显然会造成执行效率的下降。双重检测锁实现,不太了解,貌似由于编译器优化和JVM底层模型的原型的原因,偶尔出错,不建议使用。而在静态内部类实现中,兼备了效率和延迟加载的优势,推荐这种,最后的枚举,就是一个天然的单例模式,由JVM来进行保证,但是它不具备延迟加载的优势。
创建型模式:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式。
结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
行为型模式:模板方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。
单例模式:顾名思义,就是一个实例,保证一个类只有一个具体化的实例,去完成一定的工作,提供一个可供访问该实例的全局访问点,例如Windows操作系统下的回收站就是一个典型的单例。下边介绍单例模式的几种实现方式:
1.饿汉式实现:
public class SingletonDemo02 {
//类初始化时,立即加载这个对象(没有延时加载的优势).加载类是天然的线程安全
private static SingletonDemo02 instance = new SingletonDemo02();
private SingletonDemo02(){//私有化构造器
}
//方法没有同步,调用效率高
public static SingletonDemo02 getInstance(){
return instance;
}
2.懒汉式实现:
public class SingletonDemo01 {
//类初始化时,不初始化这个对象(延时加载,真正用的时候再创建)
private static SingletonDemo01 instance;
private SingletonDemo01(){//私有化构造器
}
//方法同步,调用效率低
public static synchronized SingletonDemo01 getInstance(){
if(instance==null){
instance = new SingletonDemo01();
}
return instance;
}
}
3.双重检测锁式实现:
public class SingletonDemo03 {
private static SingletonDemo03 instance = null;
public static SingletonDemo03 getInstance(){
if(instance==null){
SingletonDemo03 sc;
synchronized (SingletonDemo03.class) {
sc = instance;
if(sc == null){
synchronized (SingletonDemo03.class) {
if(sc==null){
sc = new SingletonDemo03();
}
}
instance = sc;
}
}
}
return instance;
}
private SingletonDemo03(){
}
}
4.静态内部类实现:
public class SingletonDemo04 {
private static class SingletonClassInstance{
private static final SingletonDemo04 instance = new SingletonDemo04();
}
private SingletonDemo04(){
}
//方法没有同步,调用效率高
public static SingletonDemo04 getInstance(){
return SingletonClassInstance.instance;
}
}
5.枚举式实现:
public enum SingletonDemo05 {
//这个枚举元素,本身就是单例对象
INSTANCE;
//添加自己需要的操作
public void SingletonOperation(){
}
}
分析:在饿汉式实现时,假若此类一直不曾被调用,资源就会遭到浪费,在懒汉式实现时,解决了这个问题,但是每次都要加上线程锁,确保当某线程获取到此资源时,不被其他线程抢占,造成不可预知的错误,这样,很显然会造成执行效率的下降。双重检测锁实现,不太了解,貌似由于编译器优化和JVM底层模型的原型的原因,偶尔出错,不建议使用。而在静态内部类实现中,兼备了效率和延迟加载的优势,推荐这种,最后的枚举,就是一个天然的单例模式,由JVM来进行保证,但是它不具备延迟加载的优势。
相关文章推荐
- GOF二十三种设计模式之工厂模式
- 【GOF23设计模式】代理模式
- 【GOF23设计模式】责任链模式
- GOF设计模式快速学习
- 【GOF23设计模式】观察者模式
- 笔记:Gof设计模式--Memento
- GoF23种设计模式之创建型模式之工厂方法模式
- GoF23种设计模式之创建型模式之抽象工厂模式
- GoF23种设计模式之结构型模式之外观模式
- GOF设计模式
- 设计模式GRASP和GoF是怎样解决耦合的问题
- GOF23设计模式之 单例模式
- java,结构模式,GoF设计模式
- GoF23种设计模式之行为型模式之解释器模式
- GOF23设计模式之装饰模式之理解
- GOF23种设计模式趣谈(转载)
- GoF23种设计模式之行为型模式之模板方法
- 二十三种设计模式之结构型模式之桥接模式
- GoF设计模式学习笔记 第一回 Mediator
- (GOF23设计模式)_装饰模式