ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
### 单一职责原则 导入:手机的拍摄功能在强大也不如单反将照片拍得有艺术感,因为单反就一个功能就是拍出最完美的照片不是吗 概念:就一个类而言,应该仅有一个引起它变化的原因 优点:维护简便、灵活性、复用性强,减弱了模块之间的耦合性 举例:俄罗斯方块游戏的游戏区域和游戏逻辑的分离,保证了form窗体只是用来显示游戏的画面而不用考虑是否撞壁、是否消层等逻辑判断,这样既方便了form窗体的显示,也可以将逻辑功能模块再次利用 ###开放—封闭原则(核心) 导入:有一个伟人在1997年将香港重新收入祖国的怀抱,一个壮举就是“一国两制”,一个中国不能改变,但实行的制度却从社会主义又扩展了一个资本主义 概念:软件实体(类、模块、函数等等)可以扩展,不可修改,即对于扩展是开放的(类似于制度),对于更改是封闭的(类似于主权的归属),一般不可修改的部分都是抽象的 优点:易于维护、扩展、复用、灵活性好,面对易于不断变化的需求提前做出抽象就能保证系统的安全稳定了 举例:正常的工作时间是8个小时,这是不变的,我们却可以根据员工的不同情况规定上下班的具体时间,这样就不必因迟到影响心情而且工作时间并没有减少 如果“+-*/”都在一个类中修改任何一个符号都要来修改这个类,因为不是封闭的所以安全性很差,如何将这些符号抽象成一个运算类,只需提供一个开放的接口,具体的运算符号来继承就可以了 ###依赖倒转原则(标志) 导入:现在我们想给自己的电脑插根内存条,只要确保能跟主板的PCI插槽针脚相吻合就可以,并不需要考虑自己的主板的品牌 概念:高层模块不依赖低层模块,两个都应该依赖抽象,抽象不应该依赖细节,细节应该依赖抽象 优点:只要接口是稳定的,任何一个更改都不必担心其他受到影响,使得高层模块和低层模块都是容易被复用 举例:一般业务逻辑的高层模块都是一样的,如果这些高层模块具体的与某一种类型如sql server数据库是绑定的,当换成access数据库时高层模块便不能复用 ###里氏代换原则 导入:在动物界中企鹅是一种特殊的,然而在面向对象的继承时企鹅因为不会飞所以并不是一种鸟,为什么呢? 概念:子类型必须能够替换掉它们的父类型 优点:使得开放——封闭称为可能,子类型的可代替性使得使用父类类型的模块在无需修改的情况下就可以扩展 举例:猫是继承动物类的,以动物身份拥有吃、喝,当我们需要狗时,因为狗是动物,所以只需要更改实例化就可以了 ###迪米特法则 导入:会计部和技术部没有直接关联,如果会计部电脑出现故障,如何避免因不认识技术部的人而电脑迟迟无法修理的尴尬呢 概念:如果两个类之间不必直接发生通信,就不应该发生直接的相互作用,如何其中一个想调用另一个,通过第三者来调用 优点:强调了类之间的松耦合,使类更容易被复用 ![](https://box.kancloud.cn/2016-03-16_56e91026cc4a8.jpg) ###合成/聚合复用原则 导入:现在的手机大多兼容性很强。不同型号的手机软件都能共享,然而iOS系统和Android系统却还不能共享这是为什么呢 概念:聚合表示一种弱的“拥有”关系,A包含B,但B不是A的一部分组合表示一种强的“拥有”关系,B是A的局部,二者是一体的该原则就是尽量使用合成/聚合少用继承 优点:有助于保持每个类被封装,并被集中在单个任务上。这样类和类继承层次会保持较小规模,并且不太可能增长为不可控的庞然大物 举例: ![](https://box.kancloud.cn/2016-03-16_56e91026db857.jpg)