设计模式-6大设计原则

单一职责原则(SRP:Single Responsibility Principle)数据库

定义:应该有且仅有一个缘由引发类的变动。

优势编程

  • 类的复杂性下降;
  • 可读性提升;
  • 可维护性提升;
  • 变动引发的风险下降。

建议:接口必定要作到单一职责,类的设计尽可能作到只有一个缘由引发变化。设计模式

里氏替换原则(LSP:Liskov Substitution Principle)

定义:全部引用基类的地方必须能透明地使用其子类对象。函数

四层含义spa

  • 子类必须彻底实现父类的方法
  • 子类能够有本身的个性
  • 覆盖或实现父类的方法时输入参数能够被放大(子类参数是父类参数的基类)注:使用此规则重载父类函数,避免替换后调用子类方法,而不符合用户预期
  • 覆盖或实现父类的方法时输出参数能够被缩小(子类返回值是父类返回值的派生类)注:参数列表相同时使用此规则构成重写,符合预期;不一样时构成重载,同上

建议设计

类中调用其余类时,务必使用父类或接口;不然说明违背了此原则。对象

若子类不能完整地实现父类的方法,则建议断开父子继承关系,采用依赖、汇集、组合等关系替代继承。继承

 

依赖倒置原则(DIP:Dependence Inversion Principle)

三层含义接口

  • 模块间的依赖经过抽象产生,实现类之间不发生依赖关系,其依赖是经过接口或抽象类产生的;
  • 接口或抽象类不依赖于实现类;
  • 实现类依赖接口或抽象类。

简而言之:面向接口编程事务

抽象是对实现的约束,对依赖者而言,也是一种契约,目的是保证全部细节不脱离契约的范畴。

依赖的三种写法

  1. 构造函数传递依赖对象(构造函数注入)
  2. Setter方法传递依赖对象(Setter依赖注入)
  3. 接口声明依赖对象(接口注入)

建议

  • 每一个类尽可能有接口或抽象类
  • 变量的表面类型尽可能是接口或抽象类
  • 任何类都不该该从具体类派生
  • 尽可能不要覆写基类的方法
  • 结合里氏替换原则使用

关于【倒置】:

“正置”:面向实现编程,开车依赖车,使用电脑依赖电脑。

根据系统设计的须要产生了抽象间的依赖,替代了人们传统思惟中事务间的依赖,“倒置”就是从这里产生的。

 

接口隔离原则(Interface Segregation Principle, ISP)

 定义:客户端不该该依赖它不须要的接口。一个类对另外一个类的依赖应该创建在最小的接口上。(接口尽可能细化,同时接口中的方法尽可能少。)

 

四层含义

  • 接口要尽可能小:根据接口隔离原则拆分接口时,首先必须知足单一职责原则。
  • 接口要高内聚:减小对外的交互,尽可能少公布public方法。
  • 定制服务:只提供访问者须要的方法
  • 接口设计是有限度的:接口设计注意适度,控制粒度与复杂度的平衡

 

迪米特法则(Law of Demeter,LoD/Least Knowledge Principle,LKP)

 

 定义:一个对象应该对其余对象有最少的了解。

 

四层含义

  • 只和朋友交流:耦合的关系-组合、聚合、依赖等(方法实现时尽可能不引入一个类中不存在的对象)
  • 朋友间也是有距离的:合理运用封装性,封装过分细化的接口做为public方法暴露给朋友
  • 是本身的就是本身的:若是一个方法能够放在本类中,既不增长类间关系,也不对本类产生负面影响,那就放在本类中。
  • 谨慎使用Serializable(序列化)

核心

类间解耦,弱耦合。但过分使用会产生大量中转或跳转类,需反复权衡找到平衡点,跳转次数尽可能控制在两次之内。

 

开闭原则(Open Closed Principle, OCP)

 定义:软件中的对象(类,模块,函数等等)应该对于扩展是开放的,可是对于修改是封闭的。

 

优势

  • 提升复用性
  • 提升可维护性
  • 面向对象开发的要求

 

如何使用

  1.  抽象约束:不容许出现抽象类中不存在的public方法;参数类型、引用对象尽可能使用抽象类,而不是实现类;抽象层尽可能保持稳定。
  2. 元数据控制模块行为:从文件或数据库中获取元数据
  3. 制定项目章程
  4. 封装变化:将相同的变化封装到一个抽象类中;将不一样的变化封装到不一样的抽象类中。

 总结

SRP:单一职责原则

OCP:开闭原则

LSP:里氏替换原则

LoD:迪米特法则

ISP:接口隔离原则

DIP:依赖倒置原则

将六大原则首字母连接,就是SOLID(稳定的),创建稳定、灵活、健壮的设计,开闭原则是其余5大原则的精神领袖。

开闭原则是一个终极目标,任何人都没法百分百作到,咱们只是尽可能去朝这个目标去作,实际工做时也要结合具体状况。

 

 

参考文献:《设计模式之禅》--秦小波

相关文章
相关标签/搜索