DesignPattern
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Patterns are solutions to a problem in a context.
什么是模式?
Each pattern describes a problem which occurs over and over again in our environment and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
只想显示其接口。
Builder
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Definition
– Ensure a class has only one instance and provide a global point of access to it.
Adapter
Definition
– Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
definition
– Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
– 可扩展性 – 可修改性 – 可替换性
系统开放原则
– 对软/硬件使用解耦 – 程序集引用解耦 – 对象实现解耦
设计模式的核心
继承
– 接口 – 抽象类
多态
– 虚拟属性/方法 – 接口属性/方法 – 抽象属性/方法
.NET特异性
– 反射
Design Pattern
Creational Patterns Structural Patterns Behavioral Patterns
Prototype
Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype. 本质上就是ICloneable接口
Singleton
Design Pattern
模式的起源
来源于建筑学和人类学的一个概念
– 在文化人类学中,超越个人信仰和文化 差异对美感的评价是否具有一致性?
– 是否存在一个描述我们共同认知的基础? – 质量是客观的吗? – 是什么因素让我们认为一个建筑(软件)
设计是好的设计?
什么是模式?
•建筑师Christopher Alexander上世 纪70年代《The Timeless Way of Building》和《A Pattern Language》。
建立考引用 – 帮助程序员学习和团队开发
对软件设计的哲学思考
设计模式的缺点
对象过多:
– 为了实现更好的灵活性,大部分设计模式都需要把可 变内容封装到对象内,这样在增加了系统的灵活性和 可维护性的同时,引入了大量的对象,比如命令模式。
Bridge
定义
– 将抽象部分与实现部分解耦,以便这两部分都 可以独立地变化。
使用场景:
– 不希望业务逻辑和数据逻辑之间存在绑定关系, 比如业务包括仓储和划帐,数据逻辑包括 SQLServer和Oracle访问等。
– 修改业务逻辑或数据逻辑时不会相互影响。 – 复用数据逻辑部分。
Composite
关系复杂
– 设计模式往往依赖于对象之间的关系,因此引入设计 模式就意味着关系更为复杂。
测试更难
– 引入更多的对象和更为复杂的关系后,测试用例编写 更为复杂。
使用设计模式时需要注意
设计模式不是公理
– 设计模式的使用是有前提和代价的,它是在一定范围 和前提下,综合各方面因素考虑后得出的结果,因此 它是有一定代价的,当然这种代价是可以接受的。
享元(Flyweight )
运用共享技术有效地支持大量细粒度的对 象。共享是指在同一场景中被多次引用而 不会发生变化,即共享对象是无状态的, 而且与上下文无关。 使用场景:
composite objects
Decorator (装饰) Add responsibilities to objects
dynamically
Façade (外观) A single class that represents an entire
subsystem
Flyweight (享元) A fine-grained instance used for
Factory Method
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
模式在软件开发流程中的应用
架构模式 设计模式
三层结构 多层结构 管道
架构模式
设计模式
90年代初在软件设计中开始引入并流行。
四人帮(Gang of Four, GoF)的《Design
Patterns: Elements of Reusable ObjectOriented Software》, 1995年
Structural Patterns
Adapter(适配器) Match interfaces of different classes Bridge(桥接) Separates an object’s interface from its
implementation
Composite (组合) A tree structure of simple and
Abstract Factory
Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 使用场合:
– 系统要创建独立于其产品的创建、组合和表示 – 系统要由多个产品系列中的一个来配对时 – 需要提供一个产品类库,其中需要隐藏其实现,
– 将设计模式的概念应用于软件设计 – 基于设计模式的OO策略和方法。 – 对设计模式进行编目和描述
Erich Gamma Richard Helm Ralph Johnson John Vissides
– 收录了23种设计模式
为什么需要设计模式
重用解决方案
– 减少重复设计和编码 – 规范设计和编码,便于修改和升级 – 系统具有更好适应性和健壮性
Decorator
定义
– 在不改变对象的前提下,动态地为一个对象增 加其功能。它是通过创建子类来增加功能,由 此提供灵活性。
Facade
Provide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.
可能会降低开发速度:
– 为了实现更好的灵活性,必然需要考虑太多的适应性 因素以及复杂的对象关系。
何时引入设计模式
设计阶段
– 在OOAD中的用例分析与用例设计阶段 – 在OOAD中的详细设计
编码阶段
– 需求总是在变化 – 重复代码 – 类或组件之间依赖过多 – 继承层次过多
应用模式时需要考虑
系统可维护性
—— Christopher Alexander
每个模式描述了一个在我们周围不断重复发生的问题,以及该问题 的解决方案的核心。这样,你就能一次又一次地使用该方案而不必 做重复劳动。
—— Christopher Alexander
模式的组成部分
模式重要有以下组成部分
– Name:模式的名称 – Problem:模式的意图,即模式需要解决的问题 – Solution:如何实现模式, 即解决方案 – Consequence:描述应用模式后系统的情况,包括模式的效果
efficient sharing
Proxy (代理) An object representing another object
Behavioral Patterns
Chain of Resp. (职责链) A way of passing a request between a chain of objects Command (命令) Encapsulate a command request as an object Interpreter (解释器)A way to include language elements in a program Iterator (迭代器) Sequentially access the elements of a collection Mediator (中介者)Defines simplified communication between classes Memento (备忘录) Capture and restore an object's internal state Observer (观察者) A way of notifying change to a number of classes State (状态) Alter an object's behavior when its state changes Strategy (策略) Encapsulates an algorithm inside a class Template Method (模板方法)Defer the exact steps of an algorithm to a subclass Visitor (观察者) Defines a new operation to a class without change
以及所付出的代价 – Context:描述重复出现的问题及相应的解决方案所处的环境,
即模式应用之前的系统初始状态 – Force:描述为了实现目标,各种因素之间的相互作用和制约,表
示解决问题时需要考虑的各种代价,其中包括约束和强制性 – Example:使用例子 – Relation Pattern:相关模式 – Known use:已知的应用中使用的例子。
Creational Patterns
Abstract Factory(抽象工厂) Creates an instance of several families of classes Builder(生成器) Separates object construction from its representation Factory Method(工厂方法) Creates an instance of several derived classes Prototype(原型) A fully initialized instance to be copied or cloned Singleton(单件) A class of which only a single instance can exist
什么是模式?
Each pattern describes a problem which occurs over and over again in our environment and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
只想显示其接口。
Builder
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
Definition
– Ensure a class has only one instance and provide a global point of access to it.
Adapter
Definition
– Convert the interface of a class into another interface clients expect. Adapter lets classes work together that couldn't otherwise because of incompatible interfaces.
definition
– Compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.
– 可扩展性 – 可修改性 – 可替换性
系统开放原则
– 对软/硬件使用解耦 – 程序集引用解耦 – 对象实现解耦
设计模式的核心
继承
– 接口 – 抽象类
多态
– 虚拟属性/方法 – 接口属性/方法 – 抽象属性/方法
.NET特异性
– 反射
Design Pattern
Creational Patterns Structural Patterns Behavioral Patterns
Prototype
Specify the kind of objects to create using a prototypical instance, and create new objects by copying this prototype. 本质上就是ICloneable接口
Singleton
Design Pattern
模式的起源
来源于建筑学和人类学的一个概念
– 在文化人类学中,超越个人信仰和文化 差异对美感的评价是否具有一致性?
– 是否存在一个描述我们共同认知的基础? – 质量是客观的吗? – 是什么因素让我们认为一个建筑(软件)
设计是好的设计?
什么是模式?
•建筑师Christopher Alexander上世 纪70年代《The Timeless Way of Building》和《A Pattern Language》。
建立考引用 – 帮助程序员学习和团队开发
对软件设计的哲学思考
设计模式的缺点
对象过多:
– 为了实现更好的灵活性,大部分设计模式都需要把可 变内容封装到对象内,这样在增加了系统的灵活性和 可维护性的同时,引入了大量的对象,比如命令模式。
Bridge
定义
– 将抽象部分与实现部分解耦,以便这两部分都 可以独立地变化。
使用场景:
– 不希望业务逻辑和数据逻辑之间存在绑定关系, 比如业务包括仓储和划帐,数据逻辑包括 SQLServer和Oracle访问等。
– 修改业务逻辑或数据逻辑时不会相互影响。 – 复用数据逻辑部分。
Composite
关系复杂
– 设计模式往往依赖于对象之间的关系,因此引入设计 模式就意味着关系更为复杂。
测试更难
– 引入更多的对象和更为复杂的关系后,测试用例编写 更为复杂。
使用设计模式时需要注意
设计模式不是公理
– 设计模式的使用是有前提和代价的,它是在一定范围 和前提下,综合各方面因素考虑后得出的结果,因此 它是有一定代价的,当然这种代价是可以接受的。
享元(Flyweight )
运用共享技术有效地支持大量细粒度的对 象。共享是指在同一场景中被多次引用而 不会发生变化,即共享对象是无状态的, 而且与上下文无关。 使用场景:
composite objects
Decorator (装饰) Add responsibilities to objects
dynamically
Façade (外观) A single class that represents an entire
subsystem
Flyweight (享元) A fine-grained instance used for
Factory Method
Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses.
模式在软件开发流程中的应用
架构模式 设计模式
三层结构 多层结构 管道
架构模式
设计模式
90年代初在软件设计中开始引入并流行。
四人帮(Gang of Four, GoF)的《Design
Patterns: Elements of Reusable ObjectOriented Software》, 1995年
Structural Patterns
Adapter(适配器) Match interfaces of different classes Bridge(桥接) Separates an object’s interface from its
implementation
Composite (组合) A tree structure of simple and
Abstract Factory
Provide an interface for creating families of related or dependent objects without specifying their concrete classes. 使用场合:
– 系统要创建独立于其产品的创建、组合和表示 – 系统要由多个产品系列中的一个来配对时 – 需要提供一个产品类库,其中需要隐藏其实现,
– 将设计模式的概念应用于软件设计 – 基于设计模式的OO策略和方法。 – 对设计模式进行编目和描述
Erich Gamma Richard Helm Ralph Johnson John Vissides
– 收录了23种设计模式
为什么需要设计模式
重用解决方案
– 减少重复设计和编码 – 规范设计和编码,便于修改和升级 – 系统具有更好适应性和健壮性
Decorator
定义
– 在不改变对象的前提下,动态地为一个对象增 加其功能。它是通过创建子类来增加功能,由 此提供灵活性。
Facade
Provide a unified interface to a set of interfaces in a subsystem. Façade defines a higher-level interface that makes the subsystem easier to use.
可能会降低开发速度:
– 为了实现更好的灵活性,必然需要考虑太多的适应性 因素以及复杂的对象关系。
何时引入设计模式
设计阶段
– 在OOAD中的用例分析与用例设计阶段 – 在OOAD中的详细设计
编码阶段
– 需求总是在变化 – 重复代码 – 类或组件之间依赖过多 – 继承层次过多
应用模式时需要考虑
系统可维护性
—— Christopher Alexander
每个模式描述了一个在我们周围不断重复发生的问题,以及该问题 的解决方案的核心。这样,你就能一次又一次地使用该方案而不必 做重复劳动。
—— Christopher Alexander
模式的组成部分
模式重要有以下组成部分
– Name:模式的名称 – Problem:模式的意图,即模式需要解决的问题 – Solution:如何实现模式, 即解决方案 – Consequence:描述应用模式后系统的情况,包括模式的效果
efficient sharing
Proxy (代理) An object representing another object
Behavioral Patterns
Chain of Resp. (职责链) A way of passing a request between a chain of objects Command (命令) Encapsulate a command request as an object Interpreter (解释器)A way to include language elements in a program Iterator (迭代器) Sequentially access the elements of a collection Mediator (中介者)Defines simplified communication between classes Memento (备忘录) Capture and restore an object's internal state Observer (观察者) A way of notifying change to a number of classes State (状态) Alter an object's behavior when its state changes Strategy (策略) Encapsulates an algorithm inside a class Template Method (模板方法)Defer the exact steps of an algorithm to a subclass Visitor (观察者) Defines a new operation to a class without change
以及所付出的代价 – Context:描述重复出现的问题及相应的解决方案所处的环境,
即模式应用之前的系统初始状态 – Force:描述为了实现目标,各种因素之间的相互作用和制约,表
示解决问题时需要考虑的各种代价,其中包括约束和强制性 – Example:使用例子 – Relation Pattern:相关模式 – Known use:已知的应用中使用的例子。
Creational Patterns
Abstract Factory(抽象工厂) Creates an instance of several families of classes Builder(生成器) Separates object construction from its representation Factory Method(工厂方法) Creates an instance of several derived classes Prototype(原型) A fully initialized instance to be copied or cloned Singleton(单件) A class of which only a single instance can exist