设计模式
是前人对代码开发经验的总结,是解决一系列问题的套路。 是一套解决代码可复用性、可维护性、可读性、稳健性以及安全性的安全的解决方案。
1995年,GoF(Gang of Four)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了23种设计模式,从此建立了软件设计领域的里程碑,江湖人称[GoF设计模式]。
这23种设计模式的本质是对面向对象设计原则的运用,是对类的继承性、封装性和多态性,以及类的关联关系和组合关系的充分理解。每一个模式描述了一个在我们周围重复出现的问题,以及该问题的解决方案的核心,这样子你就能一次又一次高效地解决问题。
软件工程
是复杂的,而复杂的根本来源是改变。这些改变包含客户需求的变化
,技术平台的变化
,开发团队的变化
,市场环境的变化
。
人类解决复杂问题一般有两种思路:一种是分解,一种是泛化。
将复杂问题分解为一系列能解决的小问题,然后分而治之。
由于不能完全掌握复杂对象的所有细节,因此选择忽视了它的非本质因素,而去处理泛化和理想化了模型。
如上所述,设计模式要解决的问题是程序的复用性、可拓展性、可读性,其中最重要的就是复用性。
即对于不同的模块要实现相同的功能,不应该复制代码,而是要复用代码。
编程大师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)。
软件单元中子类应该可以替换所有的父类。 即,子类应该具有父类的所有功能。
不应该强迫客户程序依赖它们不用的方法。接口应该小而完备。
另外还有两个应该引起注意的点,虽然他们不是设计原则:
在面向对象的设计模式中,可以按照目的分为三类:
具体可见如下这脑图:
原文:https://www.cnblogs.com/ylhong/p/13341906.html