设计模式透析与分类

来源:互联网 发布:linux 安装vncviewer 编辑:程序博客网 时间:2024/05/21 09:53

经典的《设计模式》一书归纳出23种设计模式,本文按《易学设计模式》一书归纳分类如下:

前言:设计原则

1、单一职责原则(SRP):一个类应仅有一个引起它变化的原因。
2、开放封闭原则(OCP):类模块应可扩展,不可修改。
这里要说明一下,扩展和修改是不同的。比如:我们要在加一种ModelDuck,那么我们写一个ModelDuck的类继承Duck,这叫扩展,不是修改。什么是修改,就好像我们开始说的那种作法,为了加一个fly的功能,我们要把所有的子类中加入不同的实现,这叫修改。
3、里氏替换原则:子类可替换基类。
4、依赖倒置原则:高层模块不依赖于低层模块,二者都依赖于抽象。还是刚才的例子:Duck是一个高层模块,fly是低层模块。Duck不依赖于fly,高层模块的改变慢,而低层模块的改变慢。抽象不应依赖于实现细节,实现细节应依赖于抽象。fly是一个抽象,它不依赖如何飞行。
5、接口隔离原则:不强迫客户程序依赖于它们不用的方法(有道理,木头鸭子不会飞为什么要让它实现飞的功能)
 最后有人提问接口和抽象类的区别:接口可以多继承,抽象类只能但继承。接口定义组件间的合同。使用抽象类为一个is a的关系。

1.创建型模式【dome】

前面讲过,社会化的分工越来越细,自然在软件设计方面也是如此,因此对象的创建和对象的使用分开也就成为了必然趋势。因为对象的创建会消耗掉系统的很多资源,所以单独对对象的创建进行研究,从而能够高效地创建对象就是创建型模式要探讨的问题。这里有6个具体的创建型模式可供研究,它们分别是:

单例模式(Singleton)

工厂方法模式(Factory Method)

抽象工厂模式(Abstract Factory)

建造者模式(Builder)

原型模式(Prototype)

简单工厂模式(Simple Factory)

说明:严格来说,简单工厂模式不是GoF总结出来的23种设计模式之一。

各个的区别:

Singleton单件模式解决的问题是:实体对象个数问题(这个现在还不太容易混);

FactoryMethod工厂方法模式解决的问题是:某个对象的创建工作;

AbstractFactory抽象工厂模式解决的问题是:“一系列互相依赖的对象”的创建工作;

Builder生成器模式解决的问题是:所谓建造者模式,就是通过不同对象去创建一个复杂的类;当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成)

Prototype原型模式,它是用来解决“某些结构复杂的对象”的创建工作,Prototype模式也正是提供了自我复制的功能,就是说新对象的创建可以通过已有对象进行创建

建造者模式、原型模式和抽象工厂的区别:
Prototype 模式通过复制原型(Prototype)而获得新对象创建的功能,这里 Prototype 本身就是“对象工厂” (因为能够生产对象) ,实际上 Prototype 模式和 Builder 模式、AbstractFactory 模式都是通过一个类(对象实例)来专门负责对象的创建工作(工厂对象) 。

它们之间的区别是:

Builder 模式重在复杂对象的一步步创建(并不直接返回对象) ,

AbstractFactory 模式重在产生多个相互依赖类的对象,

而 Prototype 模式重在从自身复制自己创建新类。 

2.结构型模式【demo】

在解决了对象的创建问题之后,对象的组成以及对象之间的依赖关系就成了开发人员关注的焦点,因为如何设计对象的结构、继承和依赖关系会影响到后续程序的维护性、代码的健壮性、耦合性等。对象结构的设计很容易体现出设计人员水平的高低,这里有7个具体的结构型模式可供研究,它们分别是:

适配器模式(Adapter)

桥模式(Bridge)

组合模式(Composite)

装饰模式(Decorator)

外观模式(Facade)

享元模式(Flyweight)

代理模式(Proxy)

总结:

适配器模式将某个类的接口转换成客户端期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题。主要分为三类:类的适配器模式、对象的适配器模式(包含其他六中模式)、接口的适配器模式。

享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用。

3.行为型模式【demo1 & demo2】

在对象的结构和对象的创建问题都解决了之后,就剩下对象的行为问题了,如果对象的行为设计的好,那么对象的行为就会更清晰,它们之间的协作效率就会提高,这里有11个具体的行为型模式可供研究,它们分别是:

模板方法(Template Method)

观察者模式(Observer)

状态模式(State)

策略模式(Strategy)

职责链模式(Chain of Responsibility)

命令模式(Command)

访问者模式(Visitor)

中介者模式(Mediator)

备忘录模式(Memento)

迭代器模式(Iterator)

解释器模式(Interpreter)

11种模式的关系图:


0 0
原创粉丝点击