单一职责原则(SRP:Single Responsibility Principle)
定义:应该有且仅有一个原因引起类的变更。
优点:
- 类的复杂性降低;
- 可读性提高;
- 可维护性提高;
- 变更引起的风险降低。
建议:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。
里氏替换原则(LSP:Liskov Substitution Principle)
定义:所有引用基类的地方必须能透明地使用其子类对象。
四层含义:
- 子类必须完全实现父类的方法
- 子类可以有自己的个性
- 覆盖或实现父类的方法时输入参数可以被放大(子类参数是父类参数的基类)注:使用此规则重载父类函数,避免替换后调用子类方法,而不符合用户预期
- 覆盖或实现父类的方法时输出参数可以被缩小(子类返回值是父类返回值的派生类)注:参数列表相同时使用此规则构成重写,符合预期;不同时构成重载,同上
建议:
类中调用其他类时,务必使用父类或接口;否则说明违背了此原则。
若子类不能完整地实现父类的方法,则建议断开父子继承关系,采用依赖、聚集、组合等关系替代继承。
依赖倒置原则(DIP:Dependence Inversion Principle)
三层含义:
- 模块间的依赖通过抽象产生,实现类之间不发生依赖关系,其依赖是通过接口或抽象类产生的;
- 接口或抽象类不依赖于实现类;
- 实现类依赖接口或抽象类。
简而言之:面向接口编程
抽象是对实现的约束,对依赖者而言,也是一种契约,目的是保证所有细节不脱离契约的范畴。
依赖的三种写法:
- 构造函数传递依赖对象(构造函数注入)
- Setter方法传递依赖对象(Setter依赖注入)
- 接口声明依赖对象(接口注入)
建议:
- 每个类尽量有接口或抽象类
- 变量的表面类型尽量是接口或抽象类
- 任何类都不应该从具体类派生
- 尽量不要覆写基类的方法
- 结合里氏替换原则使用
关于【倒置】:
"正置":面向实现编程,开车依赖车,使用电脑依赖电脑。
根据系统设计的需要产生了抽象间的依赖,替代了人们传统思维中事务间的依赖,"倒置"就是从这里产生的。
接口隔离原则(Interface Segregation Principle, ISP)
定义:客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。(接口尽量细化,同时接口中的方法尽量少。)
四层含义:
- 接口要尽量小:根据接口隔离原则拆分接口时,首先必须满足单一职责原则。
- 接口要高内聚:减少对外的交互,尽量少公布public方法。
- 定制服务:只提供访问者需要的方法
- 接口设计是有限度的:接口设计注意适度,控制粒度与复杂度的平衡
迪米特法则(Law of Demeter,LoD/Least Knowledge Principle,LKP)
定义:一个对象应该对其他对象有最少的了解。
四层含义:
- 只和朋友交流:耦合的关系-组合、聚合、依赖等(方法实现时尽量不引入一个类中不存在的对象)
- 朋友间也是有距离的:合理运用封装性,封装过度细化的接口作为public方法暴露给朋友
- 是自己的就是自己的:如果一个方法可以放在本类中,既不增加类间关系,也不对本类产生负面影响,那就放在本类中。
- 谨慎使用Serializable(序列化)
核心:
类间解耦,弱耦合。但过度使用会产生大量中转或跳转类,需反复权衡找到平衡点,跳转次数尽量控制在两次以内。
开闭原则(Open Closed Principle, OCP)
定义:软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的。
优点:
- 提高复用性
- 提高可维护性
- 面向对象开发的要求
如何使用
- 抽象约束:不允许出现抽象类中不存在的public方法;参数类型、引用对象尽量使用抽象类,而不是实现类;抽象层尽量保持稳定。
- 元数据控制模块行为:从文件或数据库中获取元数据
- 制定项目章程
- 封装变化:将相同的变化封装到一个抽象类中;将不同的变化封装到不同的抽象类中。
总结
SRP:单一职责原则
OCP:开闭原则
LSP:里氏替换原则
LoD:迪米特法则
ISP:接口隔离原则
DIP:依赖倒置原则
将六大原则首字母链接,就是SOLID(稳定的),建立稳定、灵活、健壮的设计,开闭原则是其他5大原则的精神领袖。
开闭原则是一个终极目标,任何人都无法百分百做到,我们只是尽量去朝这个目标去做,实际工作时也要结合具体情况。
参考文献:《设计模式之禅》--秦小波
原文转载:http://www.shaoqun.com/a/494835.html
首信易:https://www.ikjzd.com/w/1841
万国邮政联盟:https://www.ikjzd.com/w/861
铭宣海淘:https://www.ikjzd.com/w/1551
6大设计原则简单总结单一职责原则(SRP:SingleResponsibilityPrinciple)定义:应该有且仅有一个原因引起类的变更。优点:类的复杂性降低;可读性提高;可维护性提高;变更引起的风险降低。建议:接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化。里氏替换原则(LSP:LiskovSubstitutionPrinciple)定义:所有引用基类的地方必须能透明地使用其子
livingsocial:livingsocial
olive:olive
USPTO:USPTO
降低退款率!Wish瑞典路向物流最新解决方案:降低退款率!Wish瑞典路向物流最新解决方案
珠海有什么地方比较好玩的?:珠海有什么地方比较好玩的?
没有评论:
发表评论