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

六大原则

单⼀职责原则(Single Responsibility Principle)

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

类。

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

数、数据的封装

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

开闭原则(Open Closed Principle)

对扩展开放,对修改封闭

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

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

⾥⽒替换原则(Liskov Substitution Principle)

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

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

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

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

依赖倒置原则(Dependence Inversion Principle)

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

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

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

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

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

赖于抽象

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

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

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

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

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

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

接⼝隔离原则(Interface Segregation Principle)

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

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

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

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

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

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

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

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

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

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

相关推荐
JANYI20185 分钟前
嵌入式设计模式基础--C语言的继承封装与多态
java·c语言·设计模式
敲代码的 蜡笔小新4 小时前
【行为型之观察者模式】游戏开发实战——Unity事件驱动架构的核心实现策略
观察者模式·unity·设计模式·c#
琢磨先生David7 小时前
构建优雅对象的艺术:Java 建造者模式的架构解析与工程实践
java·设计模式·建造者模式
敲代码的 蜡笔小新14 小时前
【行为型之策略模式】游戏开发实战——Unity灵活算法架构的核心实现策略
unity·设计模式·c#·策略模式
_yingty_14 小时前
Java设计模式-策略模式(行为型)
java·设计模式·策略模式
炎芯随笔1 天前
【C++】【设计模式】生产者-消费者模型
开发语言·c++·设计模式
workflower1 天前
使用谱聚类将相似度矩阵分为2类
人工智能·深度学习·算法·机器学习·设计模式·软件工程·软件需求
枣伊吕波1 天前
第六节第二部分:抽象类的应用-模板方法设计模式
android·java·设计模式
lalajh1 天前
论软件设计模式及其应用
设计模式
lgily-12252 天前
常用的设计模式详解
java·后端·python·设计模式