Design Patterns Tips

模式是在某情境下,针对某问题的某种解决方案。设计模式是解决某些经常重复发生的设计问题的一些通用解决方案。

一、模式简介

1、策略模式:定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

2、观察者模式:定义了对象之间的一对多依赖,当一个对象改变时,它的所有依赖者都会收到通知并自动更新。

3、装饰者模式:动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。

4、工厂方法模式:定义了一个创建对象的接口,由子类决定要实例化哪个类。工厂方法让类把实例化推迟到子类。

5、抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

6、单件模式:确保一个类只有一个实例,并提供一个全局的访问点。

7、命令模式:将"请求"封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。

8、适配器模式:将一个类的接口,转换成客户期望的另一个接口。

9、外观模式:提供一个统一的接口,用于访问子系统中的一群接口。外观定义了一个高层接口,让子系统更易使用。

10、模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。

11、迭代器模式:提供一种方法顺序访问一个集合对象中的各个元素,而又不暴露其内部的表示。

12、组合模式:允许将对象组合成树形结构来表现"整体/部分"层次结构。组合能让客户以一致的方式处理个别对象及对象组合。

13、状态模式:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。

14、代理模式:为另一个对象提供一个替身或占位符以控制对这个对象的访问。被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。

15、桥接模式:通过将实现和抽象放在两个不同的类层次中而使它们可独立改变。

16、生成器模式:封装一个产品的构造过程,并允许按步骤构造。

17、责任链模式:使一个以上的对象有机会能够处理某个请求。每个对象依次检查此请求,并对其进行处理,或者将它传给链中的下一个对象。

18、蝇量模式:使某个类的一个实例能用来提供许多"虚拟实例"(这些实例能被同一方法控制),只用一个实例和一个客户对象来维护所有"虚拟实例"的状态。

19、解释器模式:为语言创建解释器,将每一个语法规则表示成一个类,方便于实现语言。

20、中介者模式:集中相关对象之间复杂的沟通和控制方式。中介者内包含了整个系统的控制逻辑。每个对象都会在自己的状态改变时告诉中介者,每个对象都会对中介者所发出的请求作出回应。

21、备忘录模式:存储系统关键对象的重要状态,维护关键对象的封装。将被存储的状态放在外面,不和关键对象混在一起,帮助了维护内聚。

22、原型模式:允许通过复制现有的实例来创建新的实例,使客户的代码在不知道要实例化何种特定类的情况下,或当创建给定类的实例的过程很昂贵或很复杂时,可以制造出新的实例,即向客户隐藏制造新实例的复杂性。

23、访问者模式:打破了组合类的封装,允许对组合结构加入新的操作,而无需改变结构本身。

二、模式分类

分类法1:根据模式的目标可分成三类:创建型、行为型、结构性。

1、创建型模式

涉及到将对象实例化,此类模式都提供一个方法,将客户从所需实例化的对象中解耦。

涵盖模式:Factory Method、Abstract Factory、Singleton、Builder、Prototype。

2、行为型模式

涉及到类和对象如何交互及分配职责。

涵盖模式:Strategy、Observer、Template Method、Command、State、Iterator、Interpreter、Chain of Responsibility、Mediator、Memento、Visitor。

3、结构型

涉及到把类或对象组合到更大的结构中。

涵盖模式:Adapter、Facade、Decorator、Composite、Proxy、Flyweight、Bridge。

分类法2:根据模式所处理的是类或对象分类。

1、类模式

类模式描述类之间的关系如何通过继承定义。类模式的关系是在编译时建立的。

涵盖模式:Adapter、Template Method、Factory Method、Interpreter。

2、对象模式

对象模式描述对象之间的关系,而且主要是利用组合定义。对象模式的关系通常在运行时建立,而且更加动态、更有弹性。

涵盖模式:Strategy、Observer、Facade、Decorator、Abstract Factory、Singleton、Builder、Prototype、Composite、Proxy、Flyweight、Bridge、Command、State、Iterator、Chain
of Responsibility、Mediator、Memento、Visitor。

三、设计原则

1、封装变化

2、多用组合,少用继承

3、针对接口编程,不针对实现编程

4、为交互对象之间的松耦合设计而努力

5、类应该对扩展开放,对修改关闭

6、依赖抽象,不要依赖具体类

7、最少知识原则,减少对象之间的交互,不要让太多的类耦合在一起

8、不能让高层组件依赖低层组件,且两者都应依赖抽象

9、类应该只有一个改变的理由

四、复合模式

将某些模式结合使用并不能称这些模式为复合模式,复合模式是在一个解决方案中结合两个或多个模式,以解决一般或重复发生的问题的一般性模式。MVC(Model-View-Controller)模式就是其中之一。

MVC模式简介:

1、模型

模型实现了观察者模式,当状态改变时,相关对象将持续更新。使用观察者模式,可以让模型完全独立于视图和控制器。同一个模型可以使用不同的视图,还可以同时使用多个视图。

2、视图

视图实现了组合模式,每个显示组件不是组合节点就是叶节点。当控制器告诉视图更新时,只需告诉视图最顶层的组件即可,组合会处理其余的事情。

3、控制器

视图和控制器实现了经典的策略模式:视图是一个对象,可以被调整使用不同的策略,而控制器提供了策略。视图只关心系统中可视的部分,对于任何外界的行为,都委托给控制器处理。使用策略模式也可以让视图与模型之间的关系解耦,因为控制器负责和模型交互来传递用户的请求,视图不知道工作是怎么完成的。

Design Patterns Tips

时间: 2024-10-05 14:29:06

Design Patterns Tips的相关文章

Learning JavaScript Design Patterns -- A book by Addy Osmani

Learning JavaScript Design Patterns A book by Addy Osmani Volume 1.6.2 Tweet Copyright © Addy Osmani 2015. Learning JavaScript Design Patterns is released under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 unported license. It

设计模式(Design Patterns)

设计模式(Design Patterns) 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样.项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问

Design Patterns 5 原型模式 Prototype

原型模式 Prototype 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这个原型来创建新的对象. 当我们需要多个相同的类实例时,没必要每次都使用new运算符去创建相同的类实例对象,我们可以用原型模式减少内存的消耗和达到类实例的复用. //带有返回自身接口的抽象原型类 public abstract class Prototype5 { public string Id { get; set; } public Prototype5(string id) { this.Id = id;

Cocoa Design Patterns

Book Description This is the Rough Cut version of the printed book. Much of the technology embodied by Apple's Cocoa software development frameworks have been in commercial use since 1988, and in spite of many years of use, the Cocoa frameworks are s

Learning JavaScript Design Patterns The Observer Pattern

The Observer Pattern The Observer is a design pattern where an object (known as a subject) maintains a list of objects depending on it (observers), automatically notifying them of any changes to state. When a subject needs to notify observers about s

[Design Patterns] 4. Creation Pattern

设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结,使用设计模式的目的是提高代码的可重用性,让代码更容易被他人理解,并保证代码可靠性.它是代码编制真正实现工程化. 四个关键元素:(1) Pattern Name, (2) Problem, (3) Solution, (4) Consequences. 01. Factory Method Pattern /* The product should be created by his own factory. */ Log

MapReduce Design Patterns

1. Design Patterns and MapReduce. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Design PatternsMapReduce HistoryMapReduce and Hadoop RefresherHadoop Example: Word CountPig and Hive 2. Summarization Patter

Learning JavaScript Design Patterns The Module Pattern

The Module Pattern Modules Modules are an integral piece of any robust application's architecture and typically help in keeping the units of code for a project both cleanly separated and organized. In JavaScript, there are several options for impleme

Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory

抽象工厂模式AbstractFactory 抽象工厂模式:提供一个创建产品的接口来负责创建相关或依赖的对象,而不具体明确指定具体类. 抽象工厂对于系列产品的变化支持 “开放——封闭”原则(指的是要求系统对扩展开放,对修改封闭),扩展起来非常简便,但对于添加新产品这种情况就不支持”开放——封闭 “原则. Design Patterns 4 酒干倘卖无---抽象工厂模式AbstractFactory,布布扣,bubuko.com