本文已参与「新人创造礼」活动,一起开启掘金创造之路。

规划形式简介

规划形式(Design pattern)代表了最佳的实践,通常被有经验的面向目标的软件开发人员所采用。规划形式是软件开发人员在软件开发过程中面对的一般问题的处理方案。这些处理方案是众多软件开发人员通过相当长的一段时间的实验和错误总结出来的。

规划形式是一套被反复运用的、多数人知晓的、通过分类编目的、代码规划经验的总结。运用规划形式是为了重用代码、让代码更简单被别人理解、保证代码可靠性。 毫无疑问,规划形式于己于别人于体系都是多赢的,规划形式使代码编制真正工程化,规划形式是软件工程的柱石,好像大厦的一块块砖石一样。项目中合理地运用规划形式能够完美地处理很多问题,每种形式在实际中都有相应的原理来与之对应,每种形式都描述了一个在咱们周围不断重复发生的问题,以及该问题的中心处理方案,这也是规划形式能被广泛应用的原因。

什么是 GOF(四人帮,全拼 Gang of Four)?

在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四人合著出书了一本名为Design Patterns – Elements of Reusable Object-Oriented Software(中文译名:规划形式 – 可复用的面向目标软件元素) 的书,该书首次说到了软件开发中规划形式的概念。

四位作者合称GOF(四人帮,全拼 Gang of Four) 。他们所提出的规划形式主要是根据以下的面向目标规划准则。

  • 接口编程而不是对完成编程。

  • 优先运用目标组合而不是承继。

规划形式的运用

规划形式在软件开发中的两个主要用途。

开发人员的共同平台

规划形式供给了一个规范的术语体系,且详细到特定的情形。例如,单例规划形式意味着运用单个目标,这样一切熟悉单例规划形式的开发人员都能运用单个目标,而且能够通过这种方法告诉对方,程序运用的是单例形式。

最佳的实践

规划形式已经阅历了很长一段时间的发展,它们供给了软件开发过程中面对的一般问题的最佳处理方案。学习这些形式有助于经验不足的开发人员通过一种简单方便的方法来学习软件规划。

规划形式的类型

根据规划形式的参考书Design Patterns – Elements of Reusable Object-Oriented Software(中文译名:规划形式 – 可复用的面向目标软件元素) 中所说到的,总共有 23 种规划形式。这些形式能够分为三大类:创立型形式(Creational Patterns)、结构型形式(Structural Patterns)、行为型形式(Behavioral Patterns)。当然,还有另一类规划形式:J2EE 规划形式,这儿暂不评论。

序号 形式 & 描述 包括
1 创立型形式 这些规划形式供给了一种在创立目标的一起躲藏创立逻辑的方法,而不是运用 new 运算符直接实例化目标。这使得程序在判断针对某个给定实例需求创立哪些目标时愈加灵活。 – 工厂形式(Factory Pattern)
  • 笼统工厂形式(Abstract Factory Pattern)

  • 单例形式(Singleton Pattern)

  • 制作者形式(Builder Pattern)

  • 原型形式(Prototype Pattern) | | 2 | 结构型形式 这些规划形式重视类和目标的组合。承继的概念被用来组合接口和界说组合目标获得新功用的方法。 | – 适配器形式(Adapter Pattern)

  • 桥接形式(Bridge Pattern)

  • 过滤器形式(Filter、Criteria Pattern)

  • 组合形式(Composite Pattern)

  • 装修器形式(Decorator Pattern)

  • 外观形式(Facade Pattern)

  • 享元形式(Flyweight Pattern)

  • 署理形式(Proxy Pattern) | | 3 | 行为型形式 这些规划形式特别重视目标之间的通信。 | – 责任链形式(Chain of Responsibility Pattern)

  • 命令形式(Command Pattern)

  • 解说器形式(Interpreter Pattern)

  • 迭代器形式(Iterator Pattern)

  • 中介者形式(Mediator Pattern)

  • 备忘录形式(Memento Pattern)

  • 观察者形式(Observer Pattern)

  • 状态形式(State Pattern)

  • 空目标形式(Null Object Pattern)

  • 战略形式(Strategy Pattern)

  • 模板形式(Template Pattern)

  • 拜访者形式(Visitor Pattern) | | 4 | J2EE 形式 这些规划形式特别重视表明层。这些形式是由 Sun Java Center 鉴定的。 | – MVC 形式(MVC Pattern)

  • 业务代表形式(Business Delegate Pattern)

  • 组合实体形式(Composite Entity Pattern)

  • 数据拜访目标形式(Data Access Object Pattern)

  • 前端控制器形式(Front Controller Pattern)

  • 拦截过滤器形式(Intercepting Filter Pattern)

  • 服务定位器形式(Service Locator Pattern)

  • 传输目标形式(Transfer Object Pattern) |

下面用一个图片来全体描述一下规划形式之间的联系:

C语言和设计模式 C Languange and Design Pattern

规划形式的六大准则

1、开闭准则(Open Close Principle)

开闭准则的意思是:对扩展开放,对修正关闭。在程序需求进行拓展的时候,不能去修正原有的代码,完成一个热插拔的作用。简言之,是为了使程序的扩展性好,易于保护和晋级。想要达到这样的作用,咱们需求运用接口和笼统类,后面的详细规划中咱们会说到这点。

2、里氏代换准则(Liskov Substitution Principle)

里氏代换准则是面向目标规划的基本准则之一。 里氏代换准则中说,任何基类能够出现的地方,子类一定能够出现。LSP 是承继复用的柱石,只有当派生类能够替换掉基类,且软件单位的功用不受到影响时,基类才能真正被复用,而派生类也能够在基类的根底上添加新的行为。里氏代换准则是对开闭准则的补充。完成开闭准则的关键步骤便是笼统化,而基类与子类的承继联系便是笼统化的详细完成,所以里氏代换准则是对完成笼统化的详细步骤的规范。

3、依赖倒转准则(Dependence Inversion Principle)

这个准则是开闭准则的根底,详细内容:针对接口编程,依赖于笼统而不依赖于详细。

4、接口阻隔准则(Interface Segregation Principle)

这个准则的意思是:运用多个阻隔的接口,比运用单个接口要好。它还有别的一个意思是:下降类之间的耦合度。由此可见,其实规划形式便是从大型软件架构动身、便于晋级和保护的软件规划思想,它着重下降依赖,下降耦合。

5、迪米特规律,又称最少知道准则(Demeter Principle)

最少知道准则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得体系功用模块相对独立。

6、组成复用准则(Composite Reuse Principle)

组成复用准则是指:尽量运用组成/聚合的方法,而不是运用承继。