设计模式简要概述(ppt 18页)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
设计模式
Design Patterns
概述
❖ 导致重新设计的一般原因
▪ 通过显式指定一个类来创建对象 ▪ 对特殊操作的依赖 ▪ 对硬件和软件平台的依赖 ▪ 对对象表示和实现的依赖 ▪ 对算法的依赖 ▪ 紧耦合 ▪ 通过生成子类来扩充功能 ▪ 不能方便地对类进行修改
概述
❖ 继承、组合、参数化类型
▪ 类继承与接口继承的比较 ▪ 继承与组合的比较 ▪ 继承与参数化类型的比较
1.单例模式的结构
❖ 单例类的简略类图如下所示。
❖ 单例模式在Java语言的实现上有自己的特别,这些特点 往往表现在如何将自己实例化上,大致有以下三种: ▪ 饿汉式单例类 ▪ 懒汉式单例类
2.单例模式的实例化形式
❖ 饿汉式单例类 ▪ 饿汉式单例类是在Java 语言里实现得最为简便的单 例类。
此类自己将自己实例化.
一个设计得当的系统不应当有所谓的“全程”变量,这 些变量应当放到它们所描述的实体所对应的类中去。将 这些变量从它们所描述的实体类中抽出来,放到一个不 相干的单例类中去,会使得这些变量产生错误的依赖关 系和耦合关系。
4.在什么情况下使用单例模式?
❖ 例子二
▪ 问:我的一个系统需要管理与数据库的连接。学习了单例模 式后,我发现可以使用一个单例类包装一个Connection 对象, 并在finalize()方法中关闭这个Connection 对象。这样的话, 在这个单例类的实例没有被人引用时,这个finalize()对象就会 被调用,因此,Connection 对象就会被释放。这多妙啊。
Interpreter Template Method
Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
创建型模式
❖ 创建型模式的目的
▪ 使系统独立于如何创建、组合和表示对象。 ▪ 类创建型模式使用继承改变被实例化的类。 ▪ 对象创建型模式将实例化委托给另一个对象。
Abstract Factory Builder
Factory Method
Prototype
Singleton
什么是单例(Singleton)模式
❖ 作为对象的创建模式[GOF95],单例模式 确保某一个类只有一个实例,而且自行实 例化并向整个系统提供这个实例。这个类 称为单例类。
❖ 单例模式的三个要点:
//静态工厂方法 public static EagerSingleton getInstance() {
return m_instance; } }
2. 单例模式的实例化形式
❖ 懒汉式单例类
▪ 与饿汉式单例类相同之处是,类的构造方法是私有的。 ▪ 与饿汉式单例类不同的是,懒汉式单例类在第一次被
引用时将自己实例化。如果加载器是静态的,那么在 懒汉式单例类被加载时不会将自己实例化。
▪ 答:这样做是不恰当的。除非有单一实例的需求,不然不要 使用单例模式。在这里Connection 对象可以同时有几个实例 共存,不需要是单一实例。
单例模式有很多的错误使用案例都与此例子相似,它 们都是试图使用单例模式管理共享资源的生命周期, 这是不恰当的。
❖ 但是做到上面这一点并不容易,下面就是 一些这样的情况。
4.在什么情况下使用单例模式?
❖ 例子一
▪ 问:我的一个系统需要一些“全程”变量。学习了单例模式后, 我发现可以使用一个单例类盛放所有的“全程”变量。请问这样 做对吗?
▪ 答:这样做是违背单例模式的用意的。单例模式只应当在有真正 的“单一实例”的需求时才可使用。
▪ 只能有一个实例; ▪ 必须自行创建这个实例; ▪ 它必须自行向整个系统提供这个实例。
0.什么是单例(Singleton)模式
❖ 一个例子:Windows 回收站
❖ 在整个视窗系统中,回收站只能有一个实例,整 个系统都使用这个惟一的实例,而且回收站自行 提供自己的实例。因此,回收站是单例模式的应 用。
原则一:对接口编程,而不是对实现编程 原则二:优先使用对象组合,而不是继承
❖ 可复用模式
概述
实现类
创建和使用 框架使用者
继承 基类、接口
使用
使用 可复用框架
概述
❖ 什么是设计模式
▪ 设计模式是对被用来在特定场景下解决一般设 计问题的类和相互通信的对象的描述。
▪ 每一个模式描述了一个在我们周围不断重复发 生的问题,以及该问题的解决方案的核心。这 样,你就能一次又一次地使用该方案而不必做 重复劳动。
2.单例模式的实例化形式
❖ 饿汉式单例类代码清单:
public class EagerSingleton { //加载时就实例化 private static final EagerSingleton m_instance = new
EagerSingleton();
//私有的构造方法 private EagerSingleton() { }
if (m_instance == null){ m_instance = new LazySingleton();
} return m_instance; } }
3.在什么情况下使用单例模式?
❖ 使用单例模式的条件
▪ 使用单例模式有一个很重要的必要条件:在一 个系统要求一个类只有一个实例时才应当使用 单例模式。反过来说,如果一个类可以有几个 实例共存,那么就没有必要使用单例类。
概述
❖ 设计模式编目
范围 类
创建型 Factory Method
对象
Abstract Factory Builder
Prototype Singleton
目的 结构型wenku.baidu.com
Adapter
Adapter Bridge Composite Decorator Facade Flyweight Proxy
行为型
2. 单例模式的实例化形式
❖ 懒汉式单例类代码清单:
public class LazySingleton{ private static LazySingleton m_instance = null; private LazySingleton() { }
//静态工厂方法,在获取实例时才实例化 synchronized public static LazySingleton getInstance(){
Design Patterns
概述
❖ 导致重新设计的一般原因
▪ 通过显式指定一个类来创建对象 ▪ 对特殊操作的依赖 ▪ 对硬件和软件平台的依赖 ▪ 对对象表示和实现的依赖 ▪ 对算法的依赖 ▪ 紧耦合 ▪ 通过生成子类来扩充功能 ▪ 不能方便地对类进行修改
概述
❖ 继承、组合、参数化类型
▪ 类继承与接口继承的比较 ▪ 继承与组合的比较 ▪ 继承与参数化类型的比较
1.单例模式的结构
❖ 单例类的简略类图如下所示。
❖ 单例模式在Java语言的实现上有自己的特别,这些特点 往往表现在如何将自己实例化上,大致有以下三种: ▪ 饿汉式单例类 ▪ 懒汉式单例类
2.单例模式的实例化形式
❖ 饿汉式单例类 ▪ 饿汉式单例类是在Java 语言里实现得最为简便的单 例类。
此类自己将自己实例化.
一个设计得当的系统不应当有所谓的“全程”变量,这 些变量应当放到它们所描述的实体所对应的类中去。将 这些变量从它们所描述的实体类中抽出来,放到一个不 相干的单例类中去,会使得这些变量产生错误的依赖关 系和耦合关系。
4.在什么情况下使用单例模式?
❖ 例子二
▪ 问:我的一个系统需要管理与数据库的连接。学习了单例模 式后,我发现可以使用一个单例类包装一个Connection 对象, 并在finalize()方法中关闭这个Connection 对象。这样的话, 在这个单例类的实例没有被人引用时,这个finalize()对象就会 被调用,因此,Connection 对象就会被释放。这多妙啊。
Interpreter Template Method
Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor
创建型模式
❖ 创建型模式的目的
▪ 使系统独立于如何创建、组合和表示对象。 ▪ 类创建型模式使用继承改变被实例化的类。 ▪ 对象创建型模式将实例化委托给另一个对象。
Abstract Factory Builder
Factory Method
Prototype
Singleton
什么是单例(Singleton)模式
❖ 作为对象的创建模式[GOF95],单例模式 确保某一个类只有一个实例,而且自行实 例化并向整个系统提供这个实例。这个类 称为单例类。
❖ 单例模式的三个要点:
//静态工厂方法 public static EagerSingleton getInstance() {
return m_instance; } }
2. 单例模式的实例化形式
❖ 懒汉式单例类
▪ 与饿汉式单例类相同之处是,类的构造方法是私有的。 ▪ 与饿汉式单例类不同的是,懒汉式单例类在第一次被
引用时将自己实例化。如果加载器是静态的,那么在 懒汉式单例类被加载时不会将自己实例化。
▪ 答:这样做是不恰当的。除非有单一实例的需求,不然不要 使用单例模式。在这里Connection 对象可以同时有几个实例 共存,不需要是单一实例。
单例模式有很多的错误使用案例都与此例子相似,它 们都是试图使用单例模式管理共享资源的生命周期, 这是不恰当的。
❖ 但是做到上面这一点并不容易,下面就是 一些这样的情况。
4.在什么情况下使用单例模式?
❖ 例子一
▪ 问:我的一个系统需要一些“全程”变量。学习了单例模式后, 我发现可以使用一个单例类盛放所有的“全程”变量。请问这样 做对吗?
▪ 答:这样做是违背单例模式的用意的。单例模式只应当在有真正 的“单一实例”的需求时才可使用。
▪ 只能有一个实例; ▪ 必须自行创建这个实例; ▪ 它必须自行向整个系统提供这个实例。
0.什么是单例(Singleton)模式
❖ 一个例子:Windows 回收站
❖ 在整个视窗系统中,回收站只能有一个实例,整 个系统都使用这个惟一的实例,而且回收站自行 提供自己的实例。因此,回收站是单例模式的应 用。
原则一:对接口编程,而不是对实现编程 原则二:优先使用对象组合,而不是继承
❖ 可复用模式
概述
实现类
创建和使用 框架使用者
继承 基类、接口
使用
使用 可复用框架
概述
❖ 什么是设计模式
▪ 设计模式是对被用来在特定场景下解决一般设 计问题的类和相互通信的对象的描述。
▪ 每一个模式描述了一个在我们周围不断重复发 生的问题,以及该问题的解决方案的核心。这 样,你就能一次又一次地使用该方案而不必做 重复劳动。
2.单例模式的实例化形式
❖ 饿汉式单例类代码清单:
public class EagerSingleton { //加载时就实例化 private static final EagerSingleton m_instance = new
EagerSingleton();
//私有的构造方法 private EagerSingleton() { }
if (m_instance == null){ m_instance = new LazySingleton();
} return m_instance; } }
3.在什么情况下使用单例模式?
❖ 使用单例模式的条件
▪ 使用单例模式有一个很重要的必要条件:在一 个系统要求一个类只有一个实例时才应当使用 单例模式。反过来说,如果一个类可以有几个 实例共存,那么就没有必要使用单例类。
概述
❖ 设计模式编目
范围 类
创建型 Factory Method
对象
Abstract Factory Builder
Prototype Singleton
目的 结构型wenku.baidu.com
Adapter
Adapter Bridge Composite Decorator Facade Flyweight Proxy
行为型
2. 单例模式的实例化形式
❖ 懒汉式单例类代码清单:
public class LazySingleton{ private static LazySingleton m_instance = null; private LazySingleton() { }
//静态工厂方法,在获取实例时才实例化 synchronized public static LazySingleton getInstance(){