设计模式之单例
来源:互联网 发布:mac如何重装 编辑:程序博客网 时间:2024/06/01 14:01
code address:
http://download.csdn.net/detail/kaikai_sk/9872762
单例模式的意义
有些对象我们只需要一个:线程池、缓存、硬件设备等
如果多个实例会有造成冲突、结果的不一致性等问题
是否可以用静态变量方式来实现?
或者程序员之间协商个全局变量?
单例模式:确保一个类最多只有一个实例,并提供一个全局访问点
类图
实现
package simple;public class Singleton{ private static Singleton uniqueInstance; private Singleton() { } public static Singleton getInstance() { if(uniqueInstance==null) { uniqueInstance=new Singleton(); } return uniqueInstance; }}
一个巧克力工厂的例子
package Factory;import simple.Singleton;public class ChocolateFactory{ private boolean empty; private boolean boiled; private static ChocolateFactory uniqueInstance; private ChocolateFactory() { } public static ChocolateFactory getInstance() { if(uniqueInstance==null) { uniqueInstance=new ChocolateFactory(); } return uniqueInstance; } public void fill() { if(empty) { //添加原料动作 empty=false; boiled=false; } } public void boil() { if(!empty && !boiled) { //煮沸 boiled =true; } } public void drain() { if(!empty && boiled) { //倒出巧克力 empty=true; } }}
经典单例模式的优化
- 多线程问题
优化:
同步(synchronized)getInstance方法
public static synchronized ChocolateFactory getInstance() { if (uniqueInstance == null) { uniqueInstance = new ChocolateFactory(); } } return uniqueInstance; }
“急切”创建实例
public static ChocolateFactory uniqueInstance = new ChocolateFactory ();
双重检查加锁
public volatile static ChocolateFactory uniqueInstance = null; public static ChocolateFactory getInstance() { if (uniqueInstance == null) { synchronized (ChocolateFactory.class) { if (uniqueInstance == null) { uniqueInstance = new ChocolateFactory(); } } } return uniqueInstance; }
阅读全文
0 0
- 设计模式之 单例设计模式
- 设计模式之 单例设计模式
- 设计模式之单例设计模式
- 设计模式之-----------单例设计模式
- 设计模式之:单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之单例设计模式
- 设计模式之-单例设计模式
- 设计模式之单例
- 设计模式之单例
- 设计模式之 单例
- 设计模式之单例
- linux压缩和解压命令
- JS中continue在while循环、do-while循环以及for循环中的用法
- Linux基于单链表&环形队列的多线程生产者消费者模型
- 【spark你妈喊你回家吃饭-05】RDD编程之旅基础篇-01
- kafka监控软件kafka-manager 安装配置
- 设计模式之单例
- Hadoop学习——向MapReduce提交计算任务的基本流程
- 史上最全解析Android消息推送解决方案
- RC5编码格式的遥控器解码、PCA9633器件控制代码示例、串口通信程序示例、IIC通信示例
- c语言中__attribute__的意义
- Android 应用启动图标未读消息数显示
- Elasticsearch之client源码简要分析
- H264编码规范
- iOS-拨打电话三种方式(修改后)