设计模式之六大原则
参考文章:https://www.cnblogs.com/lvjy-net/p/10429873.html
一、单一职责原则(Single Responsibility Principle,SRP)
定义:一个类只负责一个功能领域中的相应职责(就一个类而言,应该只有一个引起它变化的原因)
该职责要求在面向对象设计时一个类只需要负责一个领域的功能,避免多个功能领域或者说多个实例都对应同一个类,这样降低代码之间的耦合度,提高内聚程度。
二、开闭原则(Open-Closed Principle,OCP)
定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
字面理解很清晰,意思就是设计对象时要考虑到扩展性,未来应当只允许对现有代码进行扩展,不能随意修改现有代码,这样也可以避免更多的麻烦和bug出现。
在开闭原则中,我们可以使用抽象化设计来实现该类原则。可以使用接口、抽象类等等方式定义抽象层,再根据不同需求来写具体的实现类,以此达到高扩展性的要求。
三、里氏替换原则(Liskov Substitution Principle,LSP)
定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。
该原则意思是父类对象可以使用子类对象或者说可以使用子类对象来代替父类的对象,但是不能用父类的对象来代替子类的对象。
可以理解为包含的关系:我喜欢打球,那么我必然喜欢打篮球、打羽毛球、打乒乓球,当我打篮球的时候我就可以说我在打球;反之,我说我喜欢打篮球,并不代表我喜欢打球,因为球并不只有篮球,当我说我在打球的时候,你不能说我就在打篮球是吧?
四、依赖倒置原则(Dependency Inversion Principle,DIP)
定义:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口变成,而不是针对实现编程。
依赖注入(DependencyInjection,DI):指当一个对象要与其他对象发生依赖关系时,通过抽象来注入所依赖的对象。常见注入方式有:构造注入,设值注入(Setter)和接口注入。
五、接口隔离原则(Interface Segregation Principle,ISP)
定义:使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
该原则理解起来也相对简单,当我们用接口来进行设计时,尽量将接口的功能独立,避免一个接口被大量依赖。但是,也不能将接口分得太细,这样也不利于后期的维护,所以这之间的度是设计者需要体会的关键。
六、迪米特法则(Law of Demeter,LoD)
定义:一个软件实体应当尽可能少地与其他实体发生相互作用。
在对象设计时每个类要避免过于依赖其他的类,要尽量降低其入口的访问权限。实现对象只和与自己的相关对象联系在一起。
总结:
整体来说,六大设计原则都围绕着一个点,就是降低代码之间的耦合度,也就是降低他们之间的关联程度,尽可能提高程序的后期扩展性。开闭原则、里氏替换原则、依赖倒转原则一般会结合起来使用,可以说开闭原则是最终目标、里氏替换原则是基础、依赖倒转原则是实现手段。