01.七大软件设计原则

131 阅读3分钟

七大软件设计原则

开闭原则

定义

一个软件实体,如类、模块和函数应该对扩展开放,对修改关闭。用抽象构建框架,用实现扩展细节。

优点

提高软件系统的可复用性及可维护性

理解

通过继承覆盖,别乱改人家的

继承

图解

3-1Q113100151L5.gif

依赖倒置原则

定义

高层模块不应该依赖底层模块,二者都应该依赖其抽象,抽象不应该依赖细节;细节应该依赖抽象,针对接口编程,不要对实现编程。

优点

可以减少类间的耦合性、提高系统稳定性,提高代码可读性和可维护性,可降低修改程序所造成的风险。核心面向接口编程,面向抽象编程,将实例

对象通过接口传入

理解

高层(掉用者)依赖 底层(被调用者)不是其本身而是底层的接口。易于扩展、维护、理解。(如Spring依赖注入、策略模式)

依赖注入

图解

3-1Q113131610L7.gif

单一职责原则

定义

不要存在多于一个导致类变更的原因。一个类、接口、方法只负责一项职责

优点

降低类的复杂度、提高类的可读性、提高系统的可维护性、降低变更引起的风险

理解

功能拆分,变更只针对单个功能从而不影响大局。微服务也可以理解为单一指责

图解

3-1Q113133F4161-16482861308866.gif

接口隔离原则

定义

用多个专门的接口,而不是使用单一的总接口,客户端不应该依赖它不需要的接口

优点

高内聚、低耦合的设计思想,从而使得类具有很好的可读性,可扩展性和可维护性,主要就是抽取,解耦,不冗余

理解

接口细化,根据需求依赖需要的接口

图解

3-1Q113141Q0X3.gif

迪米特法则(最少知道原则)

定义

一个对象应该对其他对象保持最少的了解,又叫最少知道原则,尽量降低类与类之间的耦合

优点

降低类之间的耦合

理解

具体逻辑下沉,上层知道的越少越好,但也需要根据实际情况分析。

图解

3-1Q113152Q5W1.gif

里氏替换原则

定义

父类可以出现的地方,子类也可以出现;反过来不可以

引申意义

含义1:子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。 ​ 含义2:子类中可以增加自己特有的方法。 ​ 含义3:当子类的方法重载父类的方法时,方法的前置条件要比父类输入参数更加严格

优点

约束继承泛滥,开闭原则的一种体现;加强程序的健壮性,同时变更时也可以有更好的兼容性和扩展性,降低需求变更时的风险性

理解

版本兼容,新版可以扩展功能,旧功能逻辑可以优化但需保证功能结果和旧版的一致性。

图解

3-1Q11311094H32.gif

3-1Q11311101SN.gif

合成复用原则

定义

尽量使用对象组合、聚合、而不是继承关系达到软件代码复用的目的

优点

可以使系统更加灵活,降低类和类之间的耦合度,一个类的变化对其他造成的影响相对较少

理解

代码复用通过抽象在父类构造通用接口引用,可以在父类通过切换实现类的方式实现复用,而不是继承复用 多使用组合、聚合,能不继承就不继承

图解

3-1Q113160133151.gif

3-1Q11316034X57.gif

设计模式分类

范围 目的创建型模式结构型模式行为型模式
类模式工厂方法(类)适配器模板方法、解释器
对象模式单例 原型 抽象工厂 建造者代理 适配器 桥接 装饰 外观 享元 组合策略 命令 职责链 状态 观察者 中介者 迭代器 访问者 备忘录