文章目录
六个设计原则
1.单一职责原则
一个类只负责一项职责,即只封装一种功能的代码或只封装一种变化原因的代码
不止是类,方法、模块、组件、插件都应该遵守这个原则
2.开闭原则
对扩展开放,对修改关闭
用依赖抽象替换依赖具体,即使用扩展去减少修改
3.里氏替换原则
多态,也可以理解为使用派生类替换基类
使用基类引用调用方法时,应该使用派生类可重写的方法,这样才能实现多态
4.接口隔离原则
可以理解为接口的单一职责原则,接口封装单一功能的抽象方法
如果一个接口封装多个功能的抽象方法,但一个类只需要实现其中的一个抽象方法,但因为实现该接口,不得不实现其他抽象方法
5.依赖反转/倒置原则
类A依赖类B,如果类B想要调用类A的方法
1.不能直接让类B依赖类A(类B持有一个类A的引用),这样容易导致内存泄露
2.应该使用依赖反转,类A持有一个内部类的实例对象,在内部类中调用外部类的方法,把它传给类B,类B调用内部类的方法,这样间接调用类A的方法
6.迪米特原则
最少依赖
类A依赖类B
1.类B要尽可能的隐藏细节,尽可能少的提供公开方法
2.类A避免不必要的调用,尽可能少的调用类B的方法
总结
对封装的要求
要求一:封装单一功能、单一变化的代码
无论是方法、类、接口,还是模块,都要求封装单一功能、单一变化的代码,这样做的好处:
1.单一变化可以减小变化的影响范围
2.单一功能更有利于复用
符合该要求的原则:单一职责原则和接口隔离原则,对类和接口的要求
要求二:隐藏细节
在类中的私有方法中,封装具体的实现代码,私有方法只会在该类中调用,不会被其他类中调用,这样做可以隐藏细节
在类中的公开方法,调用私有方法,公开方法通过依赖该类,可以使其他类调用该方法
符合该要求的原则:迪米特原则
对依赖的要求
要求一:最少依赖
类A依赖类B
1.类B要尽可能的隐藏细节,尽可能少的提供公开方法
2.类A避免不必要的调用,尽可能少的调用类B的方法
符合该要求的原则:迪米特原则
要求二:尽量用依赖抽象替换依赖具体
符合该要求的原则:开闭原则,扩展需要依赖抽象(抽象包括基类、接口)
要求三:依赖反转/倒置
类A依赖类B,如果类B想要调用类A中的方法,不能让类B也依赖类A,而是要类A持有一个内部类的实例对象,在内部类中调用外部类的方法,把它传给类B,类B调用内部类的方法,这样间接调用类A的方法
对多态中使用依赖抽象的要求
要求一:如果依赖的是基类,那么必须调用基类中的可重写方法
符合该要求的原则:里氏替换原则