Shanghai Jiao Tong University 上海交通大学 Object Oriented Analysis and Design Design Pattern 上海交通大学软件工程中心
Shanghai Jiao Tong University 上海交通大学软件工程中心 Object Oriented Analysis and Design Design Pattern
Outline 什么是设计模式 设计模式要素 设计模式的分类 ◆ 几种设计模式的介绍 创建型模式 结构型模式 行为模式 Object Oriented Analysis and Design 2
Object Oriented Analysis and Design 2 Outline w 什么是设计模式 w 设计模式要素 w 设计模式的分类 w 几种设计模式的介绍 § 创建型模式 § 结构型模式 § 行为模式
什么是模式 Christopher Alexander说过:“每一个模式描述 了一个在我们周围不断重复发生的问题,以及该问题 的解决方案的核心。这样,你就能一次又一次地使用 该方案而不必做重复劳动” 尽管A 1e x a n de r所指的是城市和建筑模式, 但他的思想也同样适用于面向对象设计模式,只是在 面向对象的解决方案里,我们用对象和接口代替了墙 壁和门窗。两类模式的核心都在于提供了相关问题的 解决方案。 定义:“在一个上下文中对一种问题的解决方案”。 这种定义限定模式为单一的问题-解决方案型 Object Oriented Analysis and Design 3
Object Oriented Analysis and Design 3 什么是模式 Christopher Alexander 说过: “每一个模式描述 了一个在我们周围不断重复发生的问题,以及该问题 的解决方案的核心。这样,你就能一次又一次地使用 该方案而不必做重复劳动” 。 尽管A l e x a n d e r所指的是城市和建筑模式, 但他的思想也同样适用于面向对象设计模式,只是在 面向对象的解决方案里,我们用对象和接口代替了墙 壁和门窗。两类模式的核心都在于提供了相关问题的 解决方案。 定义: “在一个上下文中对一种问题的解决方案” 。 ——这种定义限定模式为单一的问题-解决方案型
关于设计模式 ◆ 对已有模式的整理、分类 ◆一套描述模式的词汇,可用于交流和文档化 ◆ 为软件设计总结了宝贵的经验,这些设计经 验可以被重用,但不是简单的代码重用 ◆分类: Creational Patterns Structural Patterns Behavioral Patterns 在软件设计模式领域,起到先驱的作用 Object Oriented Analysis and Design 4
Object Oriented Analysis and Design 4 关于设计模式 w 对已有模式的整理、分类 w 一套描述模式的词汇,可用于交流和文档化 w 为软件设计总结了宝贵的经验,这些设计经 验可以被重用,但不是简单的代码重用 w 分类: § Creational Patterns § Structural Patterns § Behavioral Patterns w 在软件设计模式领域,起到先驱的作用
Design patternframework ·Patterns支持软件结构和设计的重用 抓住了特定领域中问题的成功解决方案中的静态、动态 结构和相互之间的协作关系 "patterns.与开发语言无关,但是建立在一定的环境基础上 例如:经典的MVC、Factory Method ◆ frameworks支持细节设计和代码的重用 framework是一组组件的综合,这些组件相互协作,为一 族相关应用提供了一个可重用的框架结构 ·例如:MMC、MS Script Engine 两者结合起来,design patterns and frameworks 有助于提高软件的质量 ·比如:重用性,扩展性,性能,可维护性 Object Oriented Analysis and Design 5
Object Oriented Analysis and Design 5 Design pattern与framework w Patterns支持软件结构和设计的重用 § 抓住了特定领域中问题的成功解决方案中的静态、动态 结构和相互之间的协作关系 § patterns与开发语言无关,但是建立在一定的环境基础上 § 例如:经典的MVC、Factory Method w frameworks支持细节设计和代码的重用 § framework是一组组件的综合,这些组件相互协作,为一 族相关应用提供了一个可重用的框架结构 § 例如:MMC、MS Script Engine w 两者结合起来, design patterns and frameworks 有助于提高软件的质量 § 比如:重用性,扩展性,性能,可维护性
指导模式设计的三个概念 重用(reuse):是目标 两种重要的重用手段 Inheritance composition 接口与实现分离 接口保持不变,分离带来灵活性 多态性(polymorphism)) ◆Decouple 降低复杂性 Object Oriented Analysis and Design 6
Object Oriented Analysis and Design 6 指导模式设计的三个概念 w 重用(reuse):是目标 § 两种重要的重用手段 • Inheritance & composition w 接口与实现分离 § 接口保持不变,分离带来灵活性 § 多态性(polymorphism) w Decouple § 降低复杂性
设计模式分类 目的 创建型 结构型 行为型 类 Factory Method Adapter Interpreter Template Method Abstract Factory Adapter Chain of Responsibility Builder Bridge Command 范围 Prototype Composite Iterator Singleton Decorator Mediator 对象 Facade Memento Flyweight Observer Proxy State Strategy Visitor Object Oriented Analysis and Design 7
Object Oriented Analysis and Design 7 设计模式分类
创建型模式 ·ABSTRACT FACTORY(抽象工厂,kit) ·BUILDER(生成器 ·FACTORY METHOD(工厂方法,virtual constructor) ·PROTOTYPE(原型) SINGLETON(单件) Object Oriented Analysis and Design 8
Object Oriented Analysis and Design 8 创建型模式 • ABSTRACT FACTORY(抽象工厂,kit) • BUILDER(生成器) • FACTORY METHOD(工厂方法,virtual constructor) • PROTOTYPE(原型) • SINGLETON(单件)
抽象工厂(一) 意图 提供一个创建一系列相关或相互依赖对象的 接口,而无需指定它们具体的类。 ◆ 别名 Kit Object Oriented Analysis and Design 9
Object Oriented Analysis and Design 9 抽象工厂(一) w 意图 提供一个创建一系列相关或相互依赖对象的 接口,而无需指定它们具体的类。 w 别名 Kit
抽象工厂(二) 动机 窗口和按钮等用户界面“窗口组件”定义不同的外观 和行为。为保证视感风格标准间的可移植性,一个应用不应该为 一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化 特定视感风格的窗口组件类将使得以后很难改变视感风格。 为解决这二问题我们可以定义一个抽象的WidgetFactory类,这 个类声明了一个用来创建每一类基本窗口组件的接口。每一类窗 口组件都有一个抽象类,而具体子类厕实现了窗口组件的特定视 感风格。对于每二个抽象窗口组件类,、NidgetFactory接口都有 个返回新窗口组件对象的操作。客户调用这些操作以获得窗口 组件实例,但客户并不知道他们正在使用的是哪些具体类。这样 客户就不依赖宇一般的视感风格,如下页图所示。 Object Oriented Analysis and Design 10
Object Oriented Analysis and Design 10 抽象工厂(二) w 动机 考虑一个支持多种视感( look - and - feel)标准的用户界面工 具包,例如Motif和Presentation Manager。不同的视感风格为 诸如滚动条、窗口和按钮等用户界面“窗口组件”定义不同的外观 和行为。为保证视感风格标准间的可移植性,一个应用不应该为 一个特定的视感外观硬编码它的窗口组件。在整个应用中实例化 特定视感风格的窗口组件类将使得以后很难改变视感风格。 为解决这一问题我们可以定义一个抽象的WidgetFactory类,这 个类声明了一个用来创建每一类基本窗口组件的接口。每一类窗 口组件都有一个抽象类,而具体子类则实现了窗口组件的特定视 感风格。对于每一个抽象窗口组件类, WidgetFactory接口都有 一个返回新窗口组件对象的操作。客户调用这些操作以获得窗口 组件实例,但客户并不知道他们正在使用的是哪些具体类。这样 客户就不依赖于一般的视感风格,如下页图所示