设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
我们为什么要学习设计模式呢?根本原因是为了代码的复用,增加可维护性。我们怎么才能最大限度的实现代码的复用呢?我们需要学习面向对象!我们先来介绍一下面向对象的一些基本原则,面向对象有几个重要的原则:单一职责原则、开闭原则、里氏代换、依赖倒转、合成/聚合复用原则、迪米特法则(最小知识原则)。
单一职责原则(SRP:Single Responsibility Principle):就一个类而言,应该仅有一个引起它变化的原因。
开闭原则(OCP:Open Close Principal):模块应该对扩展开放,对修改关闭。
里氏代换(LSP:Liskov Substitution Principle)子类型必须能够替换掉它们的父类型。
依赖倒转(DIP:Dependency Inversion Principle)高层模块不应该依赖低层模块,两个都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象。
合成/聚合复用原则(CARP:Composite/AggregateReuse Principle)尽量使用合成/聚合,尽量不要使用类继承。
迪米特法则(PLK:Principle of Least Knowledge)如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
有了以上的理论基础,我们对设计模式就有一些初步的了解。设计模式的本质是6个字:封装、继承、多态。
封装:每个对象都包含它能进行操作所需要的所有信息,这个特性称为封装,因此对象不必依赖其他对象来完成自己的操作。封装有很多好处:良好的封装可以减少耦合;类内部的实现可以自由的修改;对外具有清晰的接口。
继承:指一种对象直接使用另一种对象的方法和属性。如果子类继承父类,那么子类拥有父类所有非Private的属性和功能;同时,子类也可以具有自己特有的属性和方法;子类还可以以自己的方式实现父类的功能。但对于父类的构造方法子类不能继承,只能被调用。
多态:表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行。
有了以上的基础,我们可以开始设计模式的学习了。设计模式大体上可以分为三种类型:创建型、结构型和行为型,每种类型又包括若干种。下篇博客中将详细介绍几种重要的设计模式,敬请期待。