1.前言
- 在之前的文章设计模式(Design pattern):简单&粗暴解析中已经为大家深入浅出解析了 '设计模式' 的 七大原则、三大类型。
- 本文为大家解析三大类型中 创建型 里其中的 '单例模式'。
- 文章中实例 linhaojian的Github
2.目录
单例目录.png3.含义
创建一个唯一的实例。
4.解决
1.全局公用资源的共享
2.一个全局使用的类频繁地创建与销毁
5.原理
5.1 例子(打印机)
-
有一台打印机,有3个人需要打印,第一个人在打印时,需要先把打印机接上电源再打印,然后其他人打印时,就可以直接打印不需再次接收电源。
示例图
5.2 结合例子
-
类比图
示意图 - 实例
// 单例
public class Singleton {
public static volatile Singleton Singleton3;
public static Singleton getInstance3(){
if(Singleton3==null){
synchronized (Singleton.class){
if(Singleton3==null){
//开机
Singleton3 = new Singleton();
}
}
}
return Singleton3;
}
public void print(String text){
// 打印
}
}
// 调用
Singleton.getInstance3().print("打印任务A");
Singleton.getInstance3().print("打印任务B");
Singleton.getInstance3().print("打印任务C");
6.优点
1.提供了对唯一实例的受控访问,同时只能处理一个访问。
2.节约系统资源。
7.缺点
1.没有抽象层,难扩展。
2.单例类的职责过重,在一定程度上违背了“单一职责原则”。
8.六种使用方式
8.1 饿汉式:线程安全,类加载时就初始化,浪费内存
public static Singleton Singleton = new Singleton();
public static Singleton getIntance(){
return Singleton;
}
8.2 懒汉式:线程不安全,懒加载
public static Singleton Singleton1;
public static Singleton getInstance1(){
if(Singleton1==null){
Singleton1 = new Singleton();
}
return Singleton1;
}
8.3 懒汉式:线程安全,懒加载 ,效率低
public static Singleton Singleton2;
public static synchronized Singleton getInstance2(){
if(Singleton2==null){
Singleton2 = new Singleton();
}
return Singleton2;
}
8.4 双检锁/双重校验锁:线程安全,懒加载 ,效率高
public static volatile Singleton Singleton3;
public static Singleton getInstance3(){
if(Singleton3==null){
synchronized (Singleton.class){
if(Singleton3==null){
Singleton3 = new Singleton();
}
}
}
return Singleton3;
}
8.5 静态内部类:线程安全,懒加载
public static class SingletonInstance{
public static final Singleton INSTANCEE = new Singleton();
}
public static Singleton getIntance4(){
return SingletonInstance.INSTANCEE;
}
8.6 枚举
public enum SingletonEnum{
INSTANCE;
public void doSomething(){}
}
9.总结
- 到此, '单例模式' 就解析完毕,,后续我会把上述 三大类型模式 下的各子模式进行解析分享,
请继续关注linhaojian_简书! - 如果喜欢我的分享,可以点击 关注 或者 赞,你们支持是我分享的最大动力 。
- linhaojian的Github
欢迎关注linhaojian_CSDN博客或者linhaojian_简书!
不定期分享关于安卓开发的干货。
设计模式(Design pattern):简单&粗暴解析
单例模式(Singleton Pattern):简单&粗暴解析
简单工厂模式(Easy Factory Pattern):简单&粗暴解析
工厂模式(Factory Pattern):简单&粗暴解析):简单&粗暴解析
抽象工厂模式(Abstract Factory Pattern):简单&粗暴解析
建造者模式(Builder Pattern):简单&粗暴解析
代理模式(Proxy Pattern):简单&粗暴解析
装饰器模式(Decorator Pattern):简单&粗暴解析
外观模式(Facade Pattern):简单&粗暴解析
享元模式(Flyweight Pattern):简单&粗暴解析
观察者模式(Observe Pattern):简单&粗暴解析
策略模式(Strategy attern):简单&粗暴解析
写技术文章初心
- 技术知识积累
- 技术知识巩固
- 技术知识分享
- 技术知识交流
网友评论