带你了解设计模式的七大原则 原创
春节不停更,此文正在参加「星光计划-春节更帖活动」
设计模式的的七大原则(SOLID)
开闭原则(Open Closed Principle,OCP)
一个软件实体应当对扩展开放,对修改关闭
如果有一个A类、B类,A类需要新增一个功能,那么可以通过新添加一个B类来来继承A类的原功能,并在B类上完成新增功能。
总结一句话如果需要添加功能,那么扩展新类来实现新增功能的实现而不是修改旧类的方法
里氏替换原则(Liskov Substitution Principle,LSP)
继承必须确保超类所拥有的性质在子类中仍然成立
里氏替换原则是继承复用的基石,只有当子类可以替换超类,软件单位的功能不受到影响时,超类才能真正被复用,而子类也能够超基类的基础上增加新的行为。
里氏替换原则中,子类对父类的方法尽量不要重写和重载。因为父类代表了定义好的结构,通过这个规范的接口与外界交互,子类不应该随便破坏它。
总结一句话子类应该继承父类而不去改变父类
依赖倒置原则(Dependence Inversion Principle,DIP)
高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象
比如上层接口A和B,实现类是A1和B1,如果在实现类A1中需要使用B的方法,则依赖与B的接口,而不是B接口的实现。
总结一句话面向接口编程,而不是面向实现类
单一职责原则(Single Responsibility Principle,SRP)
一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分
比如存在A类、B类、C类,如果A、B、C三个类分别代表三个方法,而D类分别继承A、B、C类就可以同时使用三个方法,而不是E类中含有三个方法的具体实现。
每个类都只需要管理自己属于的自己的功能,通过各个类的组成一个超级的大类来完成多个方法,而不需要一个类完成多个功能。
总结一句话每个类只负责自己的事情,而不是变成万能
接口隔离原则(Interface Segregation Principle,ISP)
客户端不应该依赖他不需要的接口,一个类对另一个类的依赖应该建立在最小的接口上
总结一句话各个类建立自己的专用接口,而不是建立万能接口
迪米特法则(Law of Demeter,LoD)
最少知识原则
只与你的直接朋友交谈,不跟“陌生人”说话
一个类对自己依赖的类知道的越少越好。无论被依赖的类多么复杂,都应该将逻辑封装在方法的内部,通过public方法提供给外部。这样当被依赖的类变化时,才能最小的影响该类。
总结一句话无需直接交互的两个类,如果需要交互,使用中间者
注意事项过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低
合成复用原则(Composite Reuse Principle,CRP)
又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)
软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现
合成或聚合可以将已有对象纳入到新对象中,使之成为新对象的一部分,因此新对象可以调用已有对象的功能。
总结一句话优先组合,其次继承