设计模式之软件设计原则

文章目录

  • 1.开闭原则:对扩展开放,对修改关闭
  • 2.里氏代换原则:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法
  • 3.依赖倒转原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象
  • 4.接口隔离原则:一个类对另一个类的依赖应该建立在最小的接口上
  • 5.迪米特原则:不直接通信,由中介转发
  • 6.合成复用原则

1.开闭原则:对扩展开放,对修改关闭

需要使用接口和抽象类
在程序需要进行拓展的时候,不能去修改原有的代码

只要抽象的合理,可以基本保持软件架构的稳定,而软件中易变的细节可以从抽象派生来的实现类来进行扩展,当软件需要发生变化时,只需要根据需求重新派生一个实现类来扩展就可以了。

例:搜狗输入法的皮肤设计
可以为其定义一个抽象类(AbstractSkin),每个具体的皮肤(DefaultSpecificSkin和HeimaSpecificSkin)是其子类。用户窗体可以根据需要选择或者增加新的主题,而不需要修改原代码,满足开闭原则。

6.合成复用原则

尽量先使用组合或聚合等关联关系来实现,其次才考虑使用继承关系来实现
类的复用分为继承复用和合成复用两种。

继承复用:

  • 优点:简单,易实现
  • 缺点:
  1. 继承复用破坏了类的封装性,因为继承会将父类的实现细节暴露给子类,父类对子类是透明的,所以这种复用又称为白箱复用。
  2. 子类与父类的耦合度高。父类的实现的任何改变都会导致子类的实现发生变化,这不利于类的扩展与维护。
  3. 限制了复用的灵活性。从父类继承而来的实现是静态的,在编译时已经定义,在运行时不可能发生变化。

合成复用:
采用组合或聚合复用时,可以将已有对象纳入新对象中,使之成为新对象的一部分,新对象可以调用已有对象的功能。

  • 优点:
  1. 维持了类的封装性,因为成分对象的内部细节是新对象看不见的,所以这种复用又称为黑箱复用
  2. 对象间的耦合度低,可以在类的成员位置声明抽象
  3. 复用的灵活性高,这种复用可以在运行时动态进行,新对象可以动态地引用与成分对象类型相同的对象

例:汽车分类管理
汽车按“动力源”划分可分为汽油汽车、电动汽车等。按“颜色”划分可分为白色汽车、黑色汽车和红色汽车等。如果同时考虑这两种分类,组合有很多。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年11月28日
下一篇 2021年11月28日

相关推荐