学习是你快乐
题记或者感悟
最近看了下老员工的代码,给我的感觉确确实实是不一样,使用的东西和技术点都是常用的,但是我仔细看了下他的代码,在抽象类的使用,已经初始化不同的子类,然后子类又去调用父抽象类的方法,抽象类调用初始化不同的子类的方法,给我的感受就是,在代码层次和设计模式这些层次来说,确实是看能够看出来。
今天就记录下设计模式中最为简单的单例模式实现代码
1 : 饿汉式代码实现
package com.yang.design.single;
/**
* @Author: Mu_Yi
* @Date: 2019/10/22 23:16
* @Version 1.0
* @qq: 1411091515
*
* 饿汉式
*/
public class HungrySingleton {
private static HungrySingleton hungrySingleton = new HungrySingleton();
private HungrySingleton(){}
public static HungrySingleton getInstance(){
return hungrySingleton;
}
}
2 : 懒汉式(非线程安全,如果你开启多个线程去new打印地址池就可以看出)
package com.yang.design.single;
/**
* @Author: Mu_Yi
* @Date: 2019/10/22 23:13
* @Version 1.0
* @qq: 1411091515
*
* 懒汉式单例模式,线程不安全
*/
public class LazySingleton {
private static LazySingleton lazySingleton;
private LazySingleton(){}
public static LazySingleton getInstance(){
if(lazySingleton == null){
lazySingleton = new LazySingleton();
}
return lazySingleton;
}
}
3 : 双重锁检查单例模式代码实现,也就是在懒汉式上加上线程安全处理
package com.yang.design.single;
/**
* @Author: Mu_Yi
* @Date: 2019/10/22 23:17
* @Version 1.0
* @qq: 1411091515
*
* 双重锁检查单例模式
*/
public class DoubleCheckSingleton {
private DoubleCheckSingleton(){}
private static DoubleCheckSingleton doubleCheckSingleton = null;
public static DoubleCheckSingleton getInstance(){
if(doubleCheckSingleton == null){
synchronized (DoubleCheckSingleton.class){
if(doubleCheckSingleton == null){
doubleCheckSingleton = new DoubleCheckSingleton();
}
}
}
return doubleCheckSingleton;
}
}
4: 内部类单例模式
package com.yang.design.single;
/**
* @Author: Mu_Yi
* @Date: 2019/10/22 23:19
* @Version 1.0
* @qq: 1411091515
*
* 内部类单例模式
*/
public class InnerClassSingleton {
private static class InClass{
private static final InnerClassSingleton in = new InnerClassSingleton();
}
private InnerClassSingleton(){}
public static InnerClassSingleton getInstance(){
return InClass.in;
}
}
5 : 使用枚举来实现的代码
package com.yang.design.single;
/**
* @Author: Mu_Yi
* @Date: 2019/10/22 23:22
* @Version 1.0
* @qq: 1411091515
*
*/
public enum EnumSingleton {
INSTANCE;
private SingeleEnum singeleEnum;
EnumSingleton(){
this.singeleEnum = new SingeleEnum();
System.out.println(" 枚举的无参构造函数");
}
public SingeleEnum getInstance(){
return singeleEnum;
}
}
class SingeleEnum{
public SingeleEnum(){
System.out.println(" 无参构造函数初始化 ");
}
}
好啦,今天的实现代码就记录到这里了啦。