【一】为什么要学习设计模式?
设计模式要解决的软件设计问题:“过于僵硬”(Rigidity)、“过于脆弱”(Fragility)、“复用率低”(Immobility)、“粘度过高”(Viscosity)。
软件设计的目标:可扩展性(Extensibility)、灵活性(Flexibility)、可插入性(Pluggability)。
【二】有哪些设计原则?
设计模式的原则有:
“开-闭”原则(Open-Closed Principle,或者OCP)
里氏代换原则(Liskov Substitution Principle,或者LSP)
依赖倒转原则(Dependency Inversion Principle,或者DIP)
接口隔离原则(Interface Segregation Principle,或者ISP)
组合/聚合复用原则(Composition / Aggregation Principle,或者CARP)
迪米特法则(Law of Demeter,或者LoD)
【三】这些原则如何理解?
1、 “开-闭”原则(OCP)
“开-闭”的意思是:对扩展开放,对修改关闭。(Software entities should be open for extension, but closed for modification. )
这个原则讲的是,在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,也就是说,可以在不修改原有代码的情况下改变这个模块的行为。
如何遵循开闭原则?
抽象化是关键。将公共方法属性等抽象化到接口或抽象类中,使得扩展时抽象层不需要改变,从而满足对修改关闭的原则。
2、 里氏代换原则(LSP)
里氏代换原则的意思是,在使用基类的地方,一定可以使用其子类。
里氏代换原则是继承复用的基石。
3、 依赖倒转原则(DIP)
依赖倒转原则的意思是,要依赖于抽象,而不能依赖于具体,也就是我们常说的要针对接口编程,而不能针对实现编程。
4、接口隔离原则(ISP)
接口隔离原则的意思是,使用多个专门的接口比使用单一的总接口要好,也就是说,从一个客户类的角度来讲,一个类对另外一个类的依赖性应该是建立在最小的接口上的。
过于臃肿的接口是对接口的污染。
准确而恰当的划分角色以及角色所对应的接口,是面向对象设计的一个重要的组成部分。
5、组合/聚合复用原则(CARP,或合成复用原则CRP)
合成复用原则是指在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。
6、 迪米特法则(LoD)
迪米特法则又叫最少知识原则(Least Knowledge Principle,LKP),意思是说,一个对象应该对其他对象有尽可能少的了解,也就是只能跟直接对象通信,“不能跟陌生人说话”。
开-闭原则是面向对象设计的核心所在,遵循这个原则可以带来面向对象技术所声称的巨大好处,也就是可维护、可扩展、可复用、灵活性好。我们在软件设计的时候应该仅对程序中呈现出频繁变化的那部分做出抽象。依赖倒转原则可以说是面向对象设计的标志,用哪种语言来编写程序不重要,如果编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中所有的依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之那就是过程化的设计。我们采用设计模式的目的就是为了解耦,类之间的耦合越弱,越有利于复用,一个处在弱耦合的类被修改,不会对有关系的类造成波及。这也就是迪米特法则的根本思想所在。
这些设计原则在各设计模式中均有体现。在学习的过程中将一一具体学习了解。
来源:https://www.cnblogs.com/tjuximo/archive/2011/03/21/1990676.html