同步&异步日志系统-设计模式

六大原则

单⼀职责原则(Single Responsibility Principle)

类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或

类。

使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀个类中应该是⼀组相关性很⾼的函

数、数据的封装

⽤例:⽹络聊天:⽹络通信 & 聊天,应该分割成为⽹络通信类 & 聊天类

开闭原则(Open Closed Principle)

对扩展开放,对修改封闭

使⽤建议:对软件实体的改动,最好⽤扩展⽽⾮修改的⽅式。

⽤例:超时卖货:商品价格---不是修改商品的原来价格,⽽是新增促销价格。

⾥⽒替换原则(Liskov Substitution Principle)

通俗点讲,就是只要⽗类能出现的地⽅,⼦类就可以出现,⽽且替换为⼦类也不会产⽣任何错 误或异常。

在继承类时,务必重写⽗类中所有的⽅法,尤其需要注意⽗类的protected⽅法,⼦类尽量不要 暴露⾃⼰的public⽅法供外界调⽤。

使⽤建议:⼦类必须完全实现⽗类的⽅法,孩⼦类可以有⾃⼰的个性。覆盖或实现⽗类的⽅法 时,输⼊参数可以被放⼤,输出可以缩⼩

⽤例:跑步运动员类-会跑步,⼦类⻓跑运动员-会跑步且擅⻓⻓跑, ⼦类短跑运动员-会跑步且 擅⻓短跑

依赖倒置原则(Dependence Inversion Principle)

⾼层模块不应该依赖低层模块,两者都应该依赖其抽象. 不可分割的原⼦逻辑就是低层模式,原 ⼦逻辑组装成的就是⾼层模块。

模块间依赖通过抽象(接⼝)发⽣,具体类之间不直接依赖

使⽤建议:每个类都尽量有抽象类,任何类都不应该从具体类派⽣。尽量不要重写基类的⽅

法。结合⾥⽒替换原则使⽤。

⽤例:奔驰⻋司机类--只能开奔驰; 司机类 -- 给什么⻋,就开什么⻋; 开⻋的⼈:司机--依

赖于抽象

迪⽶特法则(Law of Demeter),⼜叫"最少知道法则"

尽量减少对象之间的交互,从⽽减⼩类之间的耦合。⼀个对象应该对其他对象有最少的了解。

对类的低耦合提出了明确的要求:

只和直接的朋友交流, 朋友之间也是有距离的。⾃⼰的就是⾃⼰的(如果⼀个⽅法放在本类

中,既不增加类间关系,也对本类不产⽣负⾯影响,那就放置在本类中)。

⽤例:⽼师让班⻓点名--⽼师给班⻓⼀个名单,班⻓完成点名勾选,返回结果,⽽不是班⻓点 名,⽼师勾选

接⼝隔离原则(Interface Segregation Principle)

客⼾端不应该依赖它不需要的接⼝,类间的依赖关系应该建⽴在最⼩的接⼝上

使⽤建议:接⼝设计尽量精简单⼀,但是不要对外暴露没有实际意义的接⼝。

⽤例:修改密码,不应该提供修改⽤⼾信息接⼝,⽽就是单⼀的最⼩修改密码接⼝,更不要暴 露数据库操作

从整体上来理解六⼤设计原则,可以简要的概括为⼀句话,⽤抽象构建框架,⽤实现扩展细节,具体 到每⼀条设计原则,则对应⼀条注意事项:

单⼀职责原则告诉我们实现类要职责单⼀;

⾥⽒替换原则告诉我们不要破坏继承体系;

依赖倒置原则告诉我们要⾯向接⼝编程;

接⼝隔离原则告诉我们在设计接⼝的时候要精简单⼀;

迪⽶特法则告诉我们要降低耦合;

开闭原则是总纲,告诉我们要对扩展开放,对修改关闭。

相关推荐
苏近之2 小时前
说明白 Rust 中的泛型: 泛型是一种多态
设计模式·rust
Pasregret2 小时前
中介者模式:解耦对象间复杂交互的设计模式
设计模式·交互·中介者模式
前端大白话4 小时前
前端必学!CSS gap属性在Flexbox和Grid布局中的“间距魔法”
前端·css·设计模式
牛奶咖啡135 小时前
学习设计模式《五》——工厂方法模式
学习·设计模式·工厂方法模式·ioc/di·参数化工厂方法
渊渟岳5 小时前
学习设计模式有这两就够了:手册+实战项目
设计模式
Pasregret11 小时前
迭代器模式:统一数据遍历方式的设计模式
设计模式·迭代器模式
不当菜虚困11 小时前
JAVA设计模式——(二)组合模式
java·设计模式·组合模式
CHQIUU13 小时前
Java 设计模式心法之第4篇 - 单例 (Singleton) 的正确打开方式与避坑指南
java·单例模式·设计模式
碎梦归途13 小时前
23种设计模式-结构型模式之享元模式(Java版本)
java·开发语言·jvm·设计模式·享元模式
Pasregret14 小时前
模板方法模式:定义算法骨架的设计模式
算法·设计模式·模板方法模式