面向对象六大设计原则

346 阅读3分钟

说明:只做笔记用,有什么问题评论指正。

抽象构建框架、实现去扩展细节

一、 单一职责原则

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、对扩展开放、修改关闭