最近在学习设计模式,一直在看刘伟老师的博客(《史上最全设计模式导学目录(完整版)》https://blog.csdn.net/lovelion/article/details/17517213),并收获良多,在这里记录一下自己的学习心得。
1、单一职责:一个类只负责一个功能领域中的相应职责,或可以定义为,就一个类而言,应该只有一个引起它变化的原因。
一个类承担的职责越多,它可被复用的可能性就越小,拓展的难度就越大,所以设计类时尽量将不同的职责封装在不同的类中,降低其相关性,减小耦合度。单一职责一高内聚、低耦合为指导方针。
2、开闭原则:一个软件实体应对扩展开发,对修改关闭,及在尽量不修改原由代码的基础上扩展。
为了满足开闭原则,我们需对系统进行抽象话设计,将不同的实现行为转移至实现层中实现完成。在设计时定义抽象类,提供通用的接口,增加功能是,通过继承增加新的类,实现新的业务,实现不修改原有的代码。达到开闭原则的需求。
3、里式替换原则:所有引用基类的的地方必须能透明地使用期子类对象。在程序中尽量使用基类类型来对对象进行定义,在其运行时在确定其子类类型,用子类对象类替换父类对象,子类的所以方法必须在父类中声明,
4、依赖倒转原则:抽象不应该依赖于细节,细节应当依赖于抽象,及针对接口编程,而不是针对实现编程。 在参数传递、返回值、变量声明等时尽量用抽象类型,而不是具体的类型
开闭原则是目标,里氏代换原则是基础,依赖倒转原则是手段,它们相辅相成,相互补充,目标一致,只是分析问题时所站角度不同而已。
5、接口隔离:使用多个专门的接口,而不使用单一的总接口,及客户端不应该依赖哪些它不需要的接口。
6、合成复用:尽量使用对象组合,而不是继承来达到复用的目的。在面向对象设计中,可以通过两种方法在不同的环境中复用已有的设计和实现,即通过组合/聚合关系或通过继承,但首先应该考虑使用组合/聚合,组合/聚合可以使系统更加灵活,降低类与类之间的耦合度,一个类的变化对其他类造成的影响相对较少;其次才考虑继承,在使用继承时,需要严格遵循里氏代换原则,有效使用继承会有助于对问题的理解,降低复杂度,而滥用继承反而会增加系统构建和维护的难度以及系统的复杂度,因此需要慎重使用继承复用。
7、迪米特法则:一个软件实体应当尽可能少地于其他实体发生相互作用。应该尽量减少对象之间的交互,如果两个对象之间不必彼此直接通信,那么这两个对象就不应当发生任何直接的相互作用,如果其中的一个对象需要调用另一个对象的某一个方法的话,可以通过第三者转发这个调用。简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。
要注意下面的几点:在类的划分上,应当尽量创建松耦合的类,类之间的耦合度越低,就越有利于复用,一个处在松耦合中的类一旦被修改,不会对关联的类造成太大波及;在类的结构设计上,每一个类都应当尽量降低其成员变量和成员函数的访问权限;在类的设计上,只要有可能,一个类型应当设计成不变类;在对其他类的引用上,一个对象对其他对象的引用应当降到最低。