设计模式基本原则

  前段时间,聆听一大牛的教诲:“c语言、java语言、C#语言这些都是一些基本的工具,而它们其中的语法、技能都是一些很简单的基础知识,刚接触编码时确定会有不少的知识、技能你不懂,但你只要碰到而且学习确定可以熟练使用。因此语言、技能都不重要,重要的是脱离语言工具的思想,编程的思想。设计模式是思想的体现,多多学习确定没错”。大牛的教诲让小弟收益匪浅,这不开始学习设计模式了。java

  学习设计模式以前,首先明确模式是针对面向对象的,它的三大特性,封装、继承、多态。面向对象设计模式有5大基本原则:单一职责原则、开发封闭原则、依赖倒置原则、接口隔离原则、Liskov替换原则。咱们学习的设计模式都是在面向对象的特性以及5大基本原则的基础上衍生而来的具体实现,因此学习以前有必要介绍几大原则的基本概念。编程

 

单一职责原则(SRP):就一个类而言,应该仅有一个引发它变化的缘由。设计模式

若是一个类承担的职责过多,就等于把这些职责耦合在一块儿,一个职责的变化可能会削弱或者抑制这个类完成其余职责的能力。这种耦合会致使脆弱的设计,当变化发生时,设计会遭受到意想不到的破坏。工具

单一职责原则能够看作是低耦合、高内聚在面向对象原则上的引伸,将职责定义为引发变化的缘由,以提升内聚性来减小引发变化的缘由。职责过多,可能引发它变化的缘由就越多,这样致使职责依赖,相互之间就会产生缘由,大大损伤其内聚性和耦合度。性能

 

开放封闭原则:对扩展时开放的,对修改是封闭的。学习

开放封闭原则是面向对象设计的核心所在。遵循这个原则能够带来面向对象技术所声称的巨大好处:可维护、可扩展、可复用、灵活性好。开发人员应该仅对程序中呈现频繁变化的那些部分作出抽象,然而,对于应用程序中的每一个部分都刻意地进行抽象一样也不是一个好主意。拒毫不成熟的抽象和抽象自己同样重要。“需求老是变化”没有不变的软件,因此须要用开放封闭原则来封闭变化知足需求,同时还能保持软件内部的封装体系稳定,不被需求的变化影响。编码

 

依赖倒置原则:spa

1 高层模块不该该依赖低层模块。两个都应该依赖抽象。设计

2 抽象不该该依赖具体(细节)。具体(细节)应该依赖抽象。面向对象设计模式

依赖倒置其实能够说是面向对象设计的标志,用哪一种语言来编写程序不重要,若是编写时考虑的都是如何针对抽象编程而不是针对细节编程,即程序中全部依赖关系都是终止于抽象类或者接口,那就是面向对象的设计,反之就是过程化的设计了。

 

接口隔离原则:

使用多个专门的接口比使用单一的总接口要好。

一个类对另一个类的依赖性应当是创建在最小的接口上的。

一个接口表明一个角色,不该当将不一样的角色都交给一个接口。没有关系的接口合并在一块儿,造成一个臃肿的大接口,这是对角色和接口的污染。

“不该该强迫客户依赖于它们不用的方法。接口属于客户,不属于它所在的类层次结构。”这个说得很明白了,再通俗点说,不要强迫客户使用它们不用的方法,若是强迫用户使用它们不使用的方法,那么这些客户就会面临因为这些不使用的方法的改变所带来的改变。

 

Liskov替换原则:

子类型必须可以替换掉它们的父类型。

任何基类能够出现的地方,子类必定能够出现。 LSP是继承复用的基石,只有当衍生类能够替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也可以在基类的基础上增长新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,因此里氏代换原则是对实现抽象化的具体步骤的规范。

 

面向对象最终的设计目标:

  • 可扩展性:有了新的需求,新的性能能够容易添加到系统中,不影响现有的性能,也不会带来新的缺陷。
  • 灵活性:添加新的功能代码修改平稳地发生,而不会影响到其它部分。
  • 可替换性:能够将系统中的某些代码替换为相同接口的其它类,不会影响到系统。

 

基本设计原则介绍完毕,下一篇从简单工厂模式写起。

相关文章
相关标签/搜索