本系列将对23中设计模式进行详细说明,本片博客为绪论,旨在说明是什么和有什么两个问题。
1、概念
引用《设计模式-可复用的面相对像设计》对设计模式的定义如下:
Christopher Alexander 说过: “每一个设计模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动”, 尽管Alexander所指的是城市和建筑模式,但他的思想也同样适用于面向对象设计模式,只是在面向对象的解决方案里,我们用对象和接口代替了墙壁和门窗。两类模式的核心都在于提供了相关问题的解决方案。
通俗的讲设计模式就是解决一类问题的解决方案,具有一定的普遍性,在碰到特定问题的时候使用特定的模式就能完美的解决,说白了设计模式就是解决特定问题的一系列套路。在面向对象软件设计中设计模式是解决特定设计问题的一系列方案或者说“套路”。这一系列解决方案是前辈们经过无数次的实践总结传承下来的宝贵经验,我们这些后来者可以直接学习前人的经验并应用到实际的工作中。一个模式应具有以下四个要素:
1. 模式名称(pattern name)
模式是建立在较高抽象层次的设计,简单词语的描述设计名称有助于我们理解,记忆和交流。
2. 问题(problem)
问题描述了应该在何时何地使用模式,简单来说其包含了模式使用的场景。它解释了设计问题和问题存在的前因后果。有时候,问题部分会包括使用模式必须满足的一系列先决条件。
3. 解决方案(solution)
解决方案描述了设计的组成部分,它们之间的相互关系及各自的职责和协作方式。可应用于同类问题的多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。
4. 效果(consequences)
效果描述了模式应用的效果及使用模式应权衡的问题。尽管我们描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。
设计原则
设计模式有很多种,但是总的设计原则可以分为六种,如下:
Single Responsibility Principle : 单一职责原则
Liskov Substitution Principle : 里氏替换原则
Dependence Inversion Principle :依赖倒置原则
Interface Segregation Principle : 接口隔离原则
Law of Demeter : 迪米特法则
Open Closed Principle : 开闭原则
六大设计原则的目的只有一个,那就是“高内聚,低耦合”,这就是设计模型的终极目标,六个原则会在以后博客中详细说明。
设计模式分类
设计模式有两种分类方法:根据目的分类(模式用来完成什么工作)和根据作用范围分类(模式主要用于类上还是主要用于对象上)。
1. 根据目的可分为:创建型 (Creational)、结构型 (structural)、 和行为型(Behavioral)三种。创建型模式与对象的创建有关;结构型模式处理类或对象的组合;行为型模式对类或象怎样交互和怎样分配职责进行描述。
2. 根据范围分为:类模式和对象模式。类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时刻便确定下来了。对象模式处理对象间的关系,这些关系在运行时刻是可以变化的,更具动态性。从某种意义上来说,几乎所有模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。
具体模式分类
范围 | 创建型 (Creational) | 结构型 (Structural) | 行为型(Behavioral) |
---|---|---|---|
类 | 工厂模式(Factory Method Pattern) | 适配器模式(Adapter Pattern)【类】 | 解释器模式(In terpreter Pattern) |
简单工厂模式(Simple Factory Method Pattern) | 模板方法模式(Template Method Pattern) | ||
对象 | 抽象工厂模式(Abstract Factory Pattern) | 适配器模式(Adapter Pattern)【对象】 | 职责链模式(Chain of Responsibility Pattern) |
建造者模式(Builder Pattern) | 桥接模式(Bridge Pattern) | 命令模式(Command Pattern) | |
单例模式(Singleton Pattern) | 组合模式(Composite Pattern) | 迭代器模式(Iterator Pattern) | |
原型模式(Prototype Pattern) | 装饰模式(Decorator Pattern) | 中介者模式(Mediator Pattern) | |
外观模式(Facade Pattern) | 备忘录模式(Memento Pattern) | ||
享元模式(Flyweight Pattern) | 观察者模式(Observer Pattern) | ||
代理模式(Proxy Pattern) | 状态模式(State Pattern) | ||
策略模式(Strategy Pattern) | |||
访问者模式(Visitor) |
设计模式不是孤立存在的他们之间存在着千丝万缕的联系。下面是GoF23个经典模式的关系: