设计模式——六大原则
一:单一职业原则(SRP:Single responsibility principle)
概念:它规定一个类应该只有一个发生变化的原因。所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。
原理:如果一个类承担的职责过多,就等于把这些职责耦合在一起了。一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力。这种耦合会导致脆弱的设计,当发生变化时,设计会遭受到意想不到的破坏。而如果想要避免这种现象的发生,就要尽可能的遵守单一职责原则。此原则的核心就是解耦和增强内聚性。
二:开放封闭原则(OCP,Open Closed Principle)
概念:软件实体应该是可扩展,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
三:依赖倒置原则(DIP,Dependence Inversion Principle)
概念:程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
四:迪米特法则(LoD,Law of Demeter),又叫做最少知识原则(LKP,Least Knowledge Principle)。
概念:一个类对于其他类知道的越少越好,就是说一个对象应当对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。
狭义的迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中的一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。
广义的迪米特法则:
- 优先考虑将一个类设置成不变类。
- 尽量降低一个类的访问权限。
- 谨慎使用Serializable。
- 尽量降低成员的访问权限。
五:里式替换原则(Liskov Substitution Principle,LSP)
概念:任何基类可以出现的地方,子类一定可以出现。
六:接口隔离原则(Interface Segregation Principle,ISP)
概念:(网上找的定义有下面几个,结合理解)
- 客户端不应该依赖它不需要的接口。
- 一个类对另一个类的依赖应该建立在最小的接口上。
- 使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。