设计模式:软件开发人员在软件开发过程中面临的一般问题的解决方案,是基于场景的解决方案。
常用的23种设计模式:
单例模式:
饿汉式:
代码实现:
//饿汉式:创建对象实例的时候直接初始化,牺牲内存空间换取较快的加载时间
public class SingletonOne {
// 1、创建类中私有构造
private SingletonOne() {
}
// 2、创建该类型的私有静态实例
// 私有private:表示不允许外部进行直接构造
// 静态static:表示不允许被修改
private static SingletonOne instance = new SingletonOne();
// 3、创建共有静态方法返回静态实例对象
public static SingletonOne getInstance() {
return instance;
}
}
测试结果:
显示one和two是同一个引用
public class Test {
public static void main(String[] args) {
SingletonOne one = SingletonOne.getInstance();
SingletonOne two = SingletonOne.getInstance();
System.out.println(one == two);// 输出:true
System.out.println("one:" + one);// 输出:one:com.imooc.singleton.SingletonOne@7852e922
System.out.println("two:" + two);// 输出:two:com.imooc.singleton.SingletonOne@7852e922
}
}
懒汉式:
代码实现:
//懒汉式:类内实例对象创建时并不直接初始化,直到第一次调用get方法时,
//才完成初始化操作,牺牲时间获取空间
public class SingletonTwo {
// 1、创建类中私有构造
private SingletonTwo() {
}
// 2、创建该类型的私有静态实例
// 私有private:表示不允许外部进行直接构造
// 静态static:表示不允许被修改
private static SingletonTwo instance = null;
// 3、创建共有静态方法返回静态实例对象
public static SingletonTwo getInstance() {
if (instance == null)
instance = new SingletonTwo();
return instance;
}
}
测试结果:
显示one_1和two_1是同一个引用
public class Test {
public static void main(String[] args) {
SingletonTwo one_1 = SingletonTwo.getInstance();
SingletonTwo two_1 = SingletonTwo.getInstance();
System.out.println(one_1 == two_1);// 输出:true
System.out.println("one_1:" + one_1);// 输出:_1:com.imooc.singleton.SingletonTwo@7852e922
System.out.println("two_1:" + two_1);// 输出:two_1:com.imooc.singleton.SingletonTwo@7852e922
}
}
饿汉式PK懒汉式:
懒汉式线程风险的解决方案:
总结: