Design Patterns
单例模式
刘 伟 (Sunny)\rweiliu_china@126.com
大纲
\r
单例模式概述\r单例模式的结构与实现\r单例模式的应用实例\r饿汉式单例与懒汉式单例\r单例模式的优缺点与适用环境\r
单例模式概述
Windows任务管理器
在正常情况下只能打开唯一一个任务管理器!
单例模式概述
如何保证一个类只有一个实例并且这个实例易于被访问?\r(1) 全局变量:可以确保对象随时都可以被访问,但不能防止创建多个对象\r(2) 让类自身负责创建和保存它的唯一实例,并保证不能创建其他实例,它还提供一个访问该实例的方法
单例模式
单例模式概述
单例模式的定义\r\r\r\r\r对象创建型模式
Only one!
单例模式概述
单例模式的定义\r要点:\r某个类只能有一个实例\r必须自行创建这个实例\r必须自行向整个系统提供这个实例\r\r
单例模式的结构与实现
单例模式的结构\r\r
单例模式的结构与实现
单例模式的结构\r单例模式只包含一个单例角色:\rSingleton(单例)\r
单例模式的结构与实现
单例模式的实现\r私有构造函数\r静态私有成员变量(自身类型)\r静态公有的工厂方法
单例模式的应用实例
实例说明
单例模式的应用实例
实例类图
服务器负载均衡器结构图
单例模式的应用实例
实例代码\r(1) LoadBalancer:负载均衡器类,充当单例角色\r(2) Program:客户端测试类\r\r\r\r\r\r
演示……
参考代码 (DesignPattern\SingletonSample)
单例模式的应用实例
结果及分析\r\r\r\r\r\r
饿汉式单例与懒汉式单例
饿汉式单例类\r饿汉式单例类(Eager Singleton)\r\r\r\r\r
饿汉式单例与懒汉式单例
饿汉式单例类\r饿汉式单例类(Eager Singleton)\r\r\r\r\r
饿汉式单例与懒汉式单例
懒汉式单例类与双重检查锁定\r懒汉式单例类(Lazy Singleton)\r\r\r\r
饿汉式单例与懒汉式单例
懒汉式单例类与双重检查锁定\r双重检查锁定\r\r\r
多个线程同时访问将导致创建多个单例对象!怎么办?
饿汉式单例与懒汉式单例
懒汉式单例类与双重检查锁定\r双重检查锁定\r\r\r
双重检查锁定
饿汉式单例与懒汉式单例
饿汉式单例类与懒汉式单例类比较\r饿汉式单例类:无须考虑多个线程同时访问的问题;调用速度和反应时间优于懒汉式单例;资源利用效率不及懒汉式单例;系统加载时间可能会比较长\r懒汉式单例类:实现了延迟加载;必须处理好多个线程同时访问的问题;需通过双重检查锁定等机制进行控制,将导致系统性能受到一定影响\r\r
单例模式的优缺点与适用环境
模式优点\r提供了对唯一实例的受控访问\r可以节约系统资源,提高系统的性能\r允许可变数目的实例(多例类)\r\r
单例模式的优缺点与适用环境
模式缺点\r扩展困难(缺少抽象层)\r单例类的职责过重\r由于自动垃圾回收机制,可能会导致共享的单例对象的状态丢失\r\r\r
单例模式的优缺点与适用环境
模式适用环境\r系统只需要一个实例对象,或者因为资源消耗太大而只允许创建一个对象\r客户调用类的单个实例只允许使用一个公共访问点,除了该公共访问点,不能通过其他途径访问该实例\r\r\r
END
Thanks!