说明:只做笔记用,有什么问题评论指正。
抽象构建框架、实现去扩展细节
一、 单一职责原则
1、一个类只做一种事,一个方法只做一件事
2、核心就是解耦和增强内聚性。
问题由来:T负责两个不同的职责:职责P1,职责P2。当由于职责P1需求发生改变而需要修改类T时,有可能会导致原本运行正常的职责P2功能发生故障。也就是说职责P1和P2被耦合在了一起。
二、迪米特法则
一个软件实体应当尽可能少的与其他实体发生相互作用
优点:
1、降低了类之间的耦合度,提高了模块的相对独立性。
2、由于亲合度降低,从而提高了类的可复用率和系统的扩展性。
缺点:
过度使用迪米特法则会使系统产生大量的中介类,从而增加系统的复杂性,使模块之间的通信效率降低。所以,在釆用迪米特法则时需要反复权衡,确保高内聚和低耦合的同时,保证系统的结构清晰
明星由于全身心投入艺术,所以许多日常事务由经纪人负责处理,如与粉丝的见面会,与媒体公司的业务洽淡等。这里的经纪人是明星的朋友,而粉丝和媒体公司是陌生人,所以适合使用迪米特法则
三、接口隔离
一个接口设计尽量精简
客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
问题由来: 接口1有方法1、方法2,接口2有方法3、方法4。此时类A需要用方法2跟方法4,则需要实现接口1&接口2的所有接口。此时方法1跟方法3是自己不想要实现的
解决方案:只需要把2、3方法单独抽离出来设计一个接口。此时为:接口1有方法1、接口2有方法4、接口3有方法2&方法3。此时类A只需要实现接口3就可以了
四、里氏替换
1、子类对象能够替换父类对象,而程序逻辑不变。
2、超类存在的地方,子类是可以替换的。
问题由来:比如父亲会做红烧排骨,儿子在新东方烹饪学校中学到了一招,在红烧排骨里面加糖和醋,变成红烧糖醋排骨,更加美味,儿子在父亲的基础红烧排骨上加了糖醋,好像没啥问题。客户点了一份红烧排骨,让儿子去做。结果上了一份红烧糖醋排骨。
解决方案:新增一个方法去做红烧糖醋排骨而不是覆盖父类的方法。这样能做红烧排骨也可以做红烧糖醋排骨
如果覆盖了父类的方法,别人在看你代码的时候。不知道调用的是子类的代码还是父类的代码。阅读痛苦。维护难
五、依赖倒置
1、高层模块不应该依赖底层模块,两个都应该依赖与抽象;抽象不应该依赖于细节,细节应该依赖于抽象。 2、面向接口编程
六、开闭原则
1、对扩展开放、修改关闭