模式的研究起源于建筑工程设计大师Christonpher Alexander 的关于城市规划与建筑设计的著作。尽管他的著作是针对于城市规划和建筑设计的。但是作者的观点实际上适用于所有的工程设计领域,包括软件开发设计领域。在软件设计方面GOF (俗称 4人帮)是《Designer Pattern》一书的作者,他们对模式的研究对后世影响极大。 从1993 年模式一书发表以来,软件学术界对于模式的讨论就从未中断过。 直至今日,GOF提出的23种模式依然对现今的软件设计依然具有很好的指导意义。
另外,GOF模式一书虽然采用smalltalk作为编程语言(最古老的面向对象的编程语言),但同样适用于c++ 、 java、 c# 等面向对象语言的软件编程领域。
Designer Pattern 中对于模式的分类:
23种设计模与7大设计原则。
创建型: 共5种
工厂方法 (简单工厂 工厂方法 静态工厂)、 抽象工厂、单例、原型、构建器(生成器)
适配器、装饰、代理、外观、桥接、组合、享元
行为型: 共11种
模板方法、状态、策略、命令、解释器、观察者、调停者(中介)、职责链、备忘录、迭代、访问者
7大设计原则:
1 单一职责: 类、接口的职责尽量细化、单一。每个类/对象都各司其职各尽所能,职责单一。
2 开、闭原则:对扩展开放,对修改关闭。
3 里氏代换:子类应当实现父接口的所有方法。 在继承、实现关系中,尽量用基类引用派生类,或基接口引用派生类/接口。
4 依赖倒转:依赖抽象而不依赖具体。具体而言就是要依赖接口编程,不要依赖接口的具体实现编程。
5 接口隔离:接口的功能尽量单一,不要在一个接口中定义过多的方法。使用多个隔离的接口比一个单独接口好。
6 迪米法特:最少知道原则,对象与外界产生的关联要尽量少。
7 合成复用:尽量使用合成/聚合的方式,不要使用继承方式。