JAVA设计模式
一、单例模式
1、定义
单例模式:确保一个类只有一个实例,并且提供一个全局访问点;
2、单例模式特点:
只有一个实例;
自我实例化;
提供全局访问点;
3、单例模式优缺点
优点:由于单例模式只生成了一个实例,所以能够节约系统资源,减少性能开销,提高系统效率,同时也能够严格控制客户对它的访问。
缺点:也正是因为系统中只有一个实例,这样就导致了单例类的职责过重,违背了“单一职责原则”,同时也没有抽象类,这样扩展起来有一定的困难。
4、单例模式 五种实现方式
a、饿汉式
线程安全,调用效率高。但是不能延时加载
package day4;
public class Single_2 {
public static Single_2 instance=new Single_2(); //1、内部创建实例
private Single_2(){ //2、构造器私有化——外部不能创建对象
}
public static Single_1 getInstance(){ //3、公有静态方法,返回实例对象
return instance;
}
}
b、懒汉式
线程不安全
public class Single_1 {
public static Single_1 instance=null; //1、内部创建实例
private Single_1(){ //2、构造器私有化——外部不能创建对象
}
public static Single_1 getInstance(){ //3、共有静态方法,返回实例对象
if(instance==null)
{
instance=new Single_1();
}
return instance;
}
}
c、双重检查加锁(懒汉式)
线程安全;
同步代码块实现,线程安全
public class Single_3 {
public static Single_3 instance_3=null;
private Single_3(){
}
public static Single_3 getInstance_3(){
if(instance_3==null)//第一重检查
{
synchronized (Single_3.class) {//加锁
if (instance_3 == null) {//第二重检查
instance_3 = new Single_3();
}
}
}
return instance_3;
}
}
d、静态内部类
实现单例模式
public class Single_4 {
public static class Sin { //静态内部类
public static Single_4 instance_4 = new Single_4();
}
private Single_4(){
}
public static Single_4 getInstance_4(){
return Sin.instance_4;
}
}
e、枚举类实现单例模式
public enum Singleton {
uniqueInstance;// 定义一个枚举的元素,它 就代表了Singleton的一个实例
public void singletonOperation() {
// 功能处理
System.err.println("功能处理");
}