源码地址: https://github.com/halibobo/DesignPattern
设计模式
关于
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类别或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其它非设计模式的模式,如架构模式。同时,算法不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题。
汇总
设计模式大体分为三类,分别是创建型、结构型和 行为型。
创建型
全部是关于如何创建实例的。这组范例可以被划分为两组:类创建范例及对象创建范例。类创建实例在实例化过程中有效的使用类之间的继承关系,对象创建范例则使用代理来完成其任务。
- 工厂方法(Factory Method)
- 抽象工厂 (Abstract Factory)
- 建造者 (Builder)
- 原型 (Prototype)
- 单例 (Singleton)
结构型
都是关于类及对象复合关系的。
- 代理 (Proxy)
- 适配器 (Adapter )
- 桥接 (Bridge)
- 组合 (Composite)
- 装饰 (Decorator)
- 外观 (Facade)
- 享元 (Flyweight)
行为型
都是关于对象之间如何通讯的
- 解释器 (Interpreter )
- 模板方法 (Template Method)
- 责任链 (Chain of Responsibility)
- 命令 (Command)
- 迭代器 (Iterator)
- 中介者 (Mediator)
- 备忘录 (Memento)
- 观察者 (Observer)
- 状态 (State)
- 策略 (Strategy)
- 访问者 (Visitor)
关于
在软件工程中,设计模式(design pattern)是对软件设计中普遍存在(反复出现)的各种问题,所提出的解决方案。这个术语是由埃里希·伽玛(Erich Gamma)等人在1990年代从建筑设计领域引入到计算机科学的。
设计模式并不直接用来完成代码的编写,而是描述在各种不同情况下,要怎么解决问题的一种方案。面向对象设计模式通常以类别或对象来描述其中的关系和相互作用,但不涉及用来完成应用程序的特定类别或对象。设计模式能使不稳定依赖于相对稳定、具体依赖于相对抽象,避免会引起麻烦的紧耦合,以增强软件设计面对并适应变化的能力。
并非所有的软件模式都是设计模式,设计模式特指软件“设计”层次上的问题。还有其它非设计模式的模式,如架构模式。同时,算法不能算是一种设计模式,因为算法主要是用来解决计算上的问题,而非设计上的问题。
汇总
设计模式大体分为三类,分别是创建型、结构型和 行为型。
创建型
全部是关于如何创建实例的。这组范例可以被划分为两组:类创建范例及对象创建范例。类创建实例在实例化过程中有效的使用类之间的继承关系,对象创建范例则使用代理来完成其任务。
- 工厂方法(Factory Method)
- 抽象工厂 (Abstract Factory)
- 建造者 (Builder)
- 原型 (Prototype)
- 单例 (Singleton)
结构型
都是关于类及对象复合关系的。
- 代理 (Proxy)
- 适配器 (Adapter )
- 桥接 (Bridge)
- 组合 (Composite)
- 装饰 (Decorator)
- 外观 (Facade)
- 享元 (Flyweight)
行为型
都是关于对象之间如何通讯的
- 解释器 (Interpreter )
- 模板方法 (Template Method)
- 责任链 (Chain of Responsibility)
- 命令 (Command)
- 迭代器 (Iterator)
- 中介者 (Mediator)
- 备忘录 (Memento)
- 观察者 (Observer)
- 状态 (State)
- 策略 (Strategy)
- 访问者 (Visitor)
介绍
工厂方法模式
简介
工厂方法模式(Factory method pattern)是一种实现了“工厂”概念的面向对象设计模式。就像其他创建型模式一样,它也是处理在不指定对象具体类型的情况下创建对象的问题。工厂方法模式的实质是“定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。”
意图
为一个产品族提供了统一的创建接口。当需要这个产品族的某一系列的时候,可以从抽象工厂中选出相应的系列创建一个具体的工厂类。
参与者
- Factory:工厂角色
工厂角色负责实现创建所有实例的内部逻辑 - Product:抽象产品角色
抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口 - ConcreteProduct:具体产品角色
具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。
UML图
实例类图
抽象工厂模式
简介
抽象工厂模式(Abstract factory pattern)是一种软件开发设计模式。抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。客户端程序不需要知道(或关心)它从这些内部的工厂方法中获得对象的具体类型,因为客户端程序仅使用这些对象的通用接口。抽象工厂模式将一组对象的实现细节与他们的一般使用分离开来。
意图
定义一个接口用于创建对象,但是让子类决定初始化哪个类。工厂方法把一个类的初始化下放到子类。
UML图
实例类图
优点
具体产品从客户代码中被分离出来
容易改变产品的系列
将一个系列的产品族统一到一起创建
缺点
在产品族中扩展新的产品是很困难的,它需要修改抽象工厂的接口
建造者(生成器)模式
简介
生成器模式(Builder Pattern),又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
意图
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
场景
- 需要生成的产品对象有复杂的内部结构。
- 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
- 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。
UML图
实例类图
参与者
- Builder
为创建一个Product对象的各个部件指定抽象接口。 - ConcreteBuilder
实现Builder的接口以构造和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口 - Director
构造一个使用Builder接口的对象。 - Product
表示被构造的复杂对象。ConcreateBuilder创建该产品的内部表示并定义它的装配过程。
包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
原型模式
简介
原型模式是创建型模式的一种,其特点在于通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。
意图
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
UML图
实例类图
单例模式
简介
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例
意图
确保一个类只有一个实例,并提供对该实例的全局访问。
UML图
实例类图
代理模式
简介
为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
意图
为其他对象提供一个代理以控制对这个对象的访问。