设计模式
是前人对代码开发经验的总结,是解决一系列问题的套路。 是一套解决代码可复用性、可维护性、可读性、稳健性以及安全性的安全的解决方案。编程
1995年,GoF(Gang of Four)合做出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,今后创建了软件设计领域的里程碑,江湖人称[GoF设计模式]。设计模式
这23种设计模式的本质是对面向对象设计原则的运用,是对类的继承性、封装性和多态性,以及类的关联关系和组合关系的充分理解。每个模式描述了一个在咱们周围重复出现的问题,以及该问题的解决方案的核心,这样子你就能一次又一次高效地解决问题。安全
软件工程
是复杂的,而复杂的根原本源是改变。这些改变包含客户需求的变化
,技术平台的变化
,开发团队的变化
,市场环境的变化
。函数
人类解决复杂问题通常有两种思路:一种是分解,一种是泛化。设计
将复杂问题分解为一系列能解决的小问题,而后分而治之。code
因为不能彻底掌握复杂对象的全部细节,所以选择忽视了它的非本质因素,而去处理泛化和理想化了模型。orm
如上所述,设计模式要解决的问题是程序的复用性、可拓展性、可读性,其中最重要的就是复用性。对象
即对于不一样的模块要实现相同的功能,不该该复制代码,而是要复用代码。blog
编程大师Martin Folwer
说过,代码的坏味道有不少种,而首当其冲的是代码重复(duplicate code)。继承
变化是复用的天敌,面向对象设计最大的优点在于:迎合变化。
设计原则比设计模式更重要。全部的设计模式都遵循设计原则,理解设计原则未来咱们本身就能设计出各类各样的涉及模式。
6大设计原则分别是:
高层模块(稳定)不该该依赖于底层模块(变化),而应该依赖于抽象。
抽象(稳定)不该该依赖于具体(变化),具体应该依赖于抽象。
如第一节所说,软件设计是复杂的,复杂的缘由是开发过程当中的各类变化。虽然软件开发充满变化,可是其中仍是有不变的地方,所以就须要把变化的部分和不变的部分进行隔离。
从宏观上来讲,这里说的变化就是低层模块,稳定指的是高层模块。
从语言层面来讲,变化指的是具体的类,稳定指的是抽象,如接口、抽象类。
In object-oriented programming, the open/closed principle states "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification"; that is, such an entity can allow its behaviour to be extended without modifying its source code.
--- from Wikipedia
在面向对象的编程中,开闭原则说明:软件实体(模块,类,函数等)应该对拓展开放,对修改关闭,即:一个实体可以不动他的源代码进行拓展。
意思就是:要使用拓展的方式来应对的需求的变化。
TIP
这里指的修改是二进制编译层面的,意思就是你修改了这个东西须要从新哪些文件才能够从新使用。
a class should only have one responsibility, which is further defined by Martin as ‘one reason to change
--- from Wikipedia
一个类应该只有一个职责。 这一原则Martin拓展为: 一个软件实体应该只有引发他改变的缘由。
Law of Demeter or Least of Knowledge is a design principle for developing software, particular Object-oriented-programs.In its general form, the LoD is a specific case of loose coupling .
迪米特法则(又称最少知道原则)是一个软件开发的设计原则,特别是面向对象编程,软件实体之间应该尽量值暴露须要暴露的。
又称最少知道原则(Least know principles)。
软件单元中子类应该能够替换全部的父类。 即,子类应该具备父类的全部功能。
不该该强迫客户程序依赖它们不用的方法。接口应该小而完备。
另外还有两个应该引发注意的点,虽然他们不是设计原则:
在面向对象的设计模式中,能够按照目的分为三类:
具体可见以下这脑图: