**
二十三种设计模式之单例模式
**
今天我们来共同学习一下,在程序开发过程中,用来提高编程效率的二十三种设计模式。
这23种设计模式,总共呢可以分为三大类:
1、创建型模式:
单例模式( Singleton),工厂方法模式(Factory Method),抽象工厂模式(Abstract Factory),创建者模式(Builder),原型模式(Prototype)
2、结构型模式:
适配器模式(Adapter),桥接模式(Bridge),装饰模式(Decorator),组合模式(Composite),外观模式(Facade),享元模式(Flyweight),代理模式(Proxy)
3、行为型模式:
模板方法模式(Template Method),命令模式(Command),迭代器模式(Iterator),观察者模式 (Observer),中介者模式(Mediator),备忘录模式(Memento),解释器模式(Expression),状态模式(State),策略模式(Strategy),职责链模式(Chain of Responsibility),访问者模式(Visitor)
在接下来的二十几篇文章中,我们就按照上面的顺序来学习者23种设计模式。
单例模式
1、核心作用:
保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。
2、常见场景:
最典型的案例就是Windows的Task Manager(不管我们启动多少个管理器,总是只有一个在运 行)。还有就是回收站也是一个单例应用。
在Servlet编程中的Application也是一个单例的典型应用。
在Spring中,每个Bean默认就是单例的,这样做的优点就是Spring容器可以管理。
在Spring MVC框架/struts1框架中,控制器对象也是单例。
3、单例模式的优点:
一个单例模式只能生成一个实例,减少了系统性能开销,当一个对象的产生需要比较多的资源时,则可以通过在应用启动时直接产生一个单例对象,然后永久驻留内存的方式来解决。
单例系统可以在系统设置全局的访问点,优化环共享资源访问。
4、实现方式:
主要有饿汉式和懒汉式两种。实现代码如下:
懒汉式:
package Singleton;
//饿汉式
public class SingletonDemo1 {
private static SingletonDemo1 instance = new SingletonDemo1(); //类初始化时立即加载这个对象,因此不管你用不用得到,都占用了一定的资源。
private SingletonDemo1(){
}
//方法没有同步,调用效率高
public static SingletonDemo1 getInstance(){
return instance;
}
}
饿汉式:
package Singleton;
//懒汉式,实现了延迟加载
public class SingletonDemo2 {
private static SingletonDemo2 instance; //未new一个新的SingletonDemo2,在需要时才new
//私有化的构造器
private SingletonDemo2(){
}
public static synchronized SingletonDemo2 getInstance(){ //synchronized保证一次只有一个线程调用,即保证了线程同步,因此调用效率低
//整个if语句保证s只被复制一次
if(instance==null){
instance =new SingletonDemo2();
}
return instance;
}
}
总结
总结来看,我们发现,单例模式有五个核心单词,那就是private,static,private,public,static。
最后呢,单例模式还有三种实现方式,双重监测锁式,静态内部类式,枚举单例。