单例设计模式 (嫌费事可以直接看我心得 省略掉写法):
单例模式就是保证一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
优点 : 1 . 由于单例模式只有一个对象 , 会节约资源 减少系统损耗
2 . 方便对相关资源进行统计
3 . 提供了对唯一实例的受控访问,加快对象访问速度
缺点 : 1 . 对如果此次访问线程处理如果需要操作 可能会创建很多的局部变量 破坏OOP
写法 : 饿汉式单例模式
/**
* 饿汉式单例模式
*/
public class Single01 {
/**类加载时,立即加载这个对象,也是叫饿汉的原因
* 这也保证了线程的安全
* -------------->在类中自己实例化自己;
*/
private static Single01 single01=new Single01();
/**私有构造器
* ------------>保证一个类只有一个实例
*/
private Single01() {
}
/**因为不需要加同步代码块就能保证线程安全,所以效率会高
* --------------->向整个系统提供这个实例;
* @return
*/
public Single01 getSingleton01(){
return single01;
}
}
饿汉式单例模式 :
/**
* 懒汉式
*/
public class Single02 {
//定义一个私有类变量来存放单例,私有的目的是指外部无法直接获取这个变量,而要使用提供的公共方法来获取 且为了防止没有写入主内存
private static volatile Single02 dl = null;
//定义私有构造器,表示只在类内部使用,亦指单例的实例只能在单例类内部创建
private Single02() {
}
/**
* 双重校验锁 如果这个不为null 则一定不为null 如果这个为null 但可能由于多线程访问导致创建多个对象 所以必须锁住该对象
* @return
*/
public static Single02 getInstance() {
if (dl == null) {
synchronized (Single02.class){
if (dl == null){
dl = new Single02();
}
}
}
return dl;
}
}
枚举式写法 :
/**
* 枚举单例 优点 : 枚举不会被反射破解 , 且写法相当简单
* 缺点 : 枚举不能被继承 破坏OOP 失去访问枚举内置方法 比如valueOf values 等
*/
public enum Single03 {
SINGLE;
}
自我心得 :
单例模式本身没什么特别的 但与其他设计模式相结合会产生巨大的力量
单例 + 工厂 : 应该用单例模式的对象 应该是那种系统资源对象(RunTime)那种宝贵资源或者单例的
他们一般不是单一参数 且变化是可控的 比如跟外部环境有关 但这个变化对客户端是无感的 我们可以在工厂中进行实现部分参数初始化操作 仅仅把需要的外界的变化
暴露给客户端
单例 + 策略 : 个人见解 , 策略模式的策略本身注重的是客户端对象调用对该对象的行为或者属性进行处理 故策略本身就应该是单例的
单例 + 责任链 : 同上 责任链本身是注重对对象的行为或者属性进行处理
我这里仅仅写的是1+1>2的思路 而不去进行1=1=2这种 比如单例+代理之类 太简单 欢迎大家补充!!!