一天一个设计模式——架构设计七原则

软件架构设计七大原则

软件架构设计七大原则
1,开闭原则
2,依赖倒置原则
3,单一职责原则
4,接口隔离原则
5,迪米特原则
6,里氏替换原则
7,合成复用原则

1,开闭原则

开闭原则(Open-Closed Principle,OCP)指一个软件实体如类,模块和函数应该对扩展开放,对修改关闭,以提高系统的复用性和可维护性。在功能改动或升级时,尽可能的不修改源码,而是通过继承实现类的方式实现新功能,有种热插拔的效果。而这些都可以通过接口和抽象类实现,也就是面向抽象编程。

如图:当我们的java课程需要打折时,不需要直接修改java课程中的价格方法,而是通过打折类super.getPrice()调用父类方法实现。而能这样做的前提是,我们的getPrice方法是由顶层的接口提供,他也没有改变java课程这个对象。

image-20210131173352811

2,依赖倒置原则

依赖倒置原则(Dependency Inversion Principle,DIP)指设计代码结构时,高层模块不应该依赖底层模块,二者都应该依赖其抽象。通过依赖倒置,降低类与类之间的耦合性。

如图:当tom开始想学python课程时,只需要新建1个python类实现课程接口,tom在选择课程时只需要传入接口参数,由接口自己去选择需要实例化的课程。这也就是依赖注入——构造器(每次构造都有一个实例)或setter方式。图中tom和课程接口有一个组合关系。

image-20210131115120379

3,单一职责原则

单一职责原则(Simple Responsibility Principle,SPR)指一个类、接口、方法应该只维护一个功能,以防止需求变更时,修改某个方法而导致其他方法受影响的情况,目的是降低程序的复杂度和耦合性。

如图,原有的课程接口有获取课程信息和管理课程两大方法,我们改造成两个接口,分别负责自己的事情;类也是一样,课程类有直播,录播两种方法,同样拆分成两个。

image-20210131121700128

4,接口隔离原则

接口隔离原则(Interface Segregation Principle,ISP)指用多个专门的接口,而不使用单一的接口,避免接口过于臃肿。设计接口原则:一个类对另一个类的依赖应该建立在最小的接口上,避免实现接口时还要实现他不需要的方法。要尽可能的细化接口,要符合高内聚,低耦合的设计思想。

如图:当我们直接使用IAnimal接口时,子类不得不实现它不需要的方法。

image-20210131123249657

5,迪米特原则

迪米特原则(Law of Demeter,LoD)又叫做最少知道原则(Least Knowledge Principle,LKP)指一个对象应该对其他对象保持最少的了解,降低类间的耦合。比如不允许其他类出现在本类的方法中。

如图:leader想要知道课程学习者的数量,这时员工就要有一个查询方法,负责统计课程。但是leader在调用时他并不需要知道课程,课程应该是员工需要知道的,他只想知道结果,所以进行了向右边的解耦。

image-20210131153933717

6,里氏替换原则

里氏替换原则(Liskow Substitution Principle,LSP)指一个软件实体如果可以适用父类,那么一定适用其子类。子类可以扩展父类的功能,而不能改变父类原有的功能。具体来说:

  • 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法;

  • 子类可以增加自己特有的方法;

  • 当子类的方法重载父类的方法时,方法的前置条件(即方法的输入参数)要比父类更宽松;

  • 当子类的方法实现父类的方法时,方法的后置条件(即方法的输出返回值)要比父类的更严格或相等。

7,合成复用原则

合成复用原则 (Composite/Aggregate Reuse Principle,CARP)指尽可能使用对象组合(has-a)或对象聚合(contains-a)的方式实现代码复用,而不是用继承关系达到代码复用的目的。(也就是我们上节讲的,组合的耦合性要弱于继承)

继承,又称为白盒复用,相当于把实现细节暴露给了子类;组合/聚合为黑盒复用,类以外的对象是无法获得实现细节的。

如图:将产品添加到 MySQL 数据库,也方便扩展到 ORACLE 数据库。同时,Dao 层不用关心如何获取ORACLE 连接,连接对它也不可见。

image-20210131164439311

需要知道的是,设计原则只是我们生产实践中力求争取的原则。它需要综合考虑人力、成本、周期、质量等问题,在适当场合遵循设计原则将提升系统构建质量。

image-20210131165413792

你可能感兴趣的:(一天一个设计模式——架构设计七原则)