设计模式中的七大原则:
单一职责原则(Single Responsibility Principle,SRP)
单一职责原则又称单一功能原则,指一个类或者模块应该有且只有一个改变的原因。是由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出来的。核心就是解耦和增强内聚性。
产生原因及解决方式:
假如说A类有两个功能a和b,当a需求发生改变时,需要开发人员修改A类,但是修改A类的同时有可能导致b功能不可用。也就是说a和b耦合在了一起。从而导致脆弱的设计,影响程序复用性。只需要遵守单一职责原则,将不同的功能封装到不同的类或者模块中就可以了。
开闭原则(Open Closed Principle,OCP)
开闭原则是由Bertrand Meyer 提出的,程序模块应对扩展开放,对修改关闭,应该在不修改源代码的情况下进行扩展。抽象工厂模式就是一个很好的实现。
里氏代换原则(Liskov Substitution Principle,LSP)
LSP是由barbara liskov 提出的,主张使用抽象和多态将设计中的静态结构改为动态结构,从而维持设计的封闭性。
定义:任何父类出现的地方,子类一定可以出现。继承必须保证超类所拥有的性质在子类中仍然成立,也就是说一个子类的实例应该能够替换任何超类的实例时,它们之间才具有LSP的关系。
例如:
public class A{
public void saySomething(){
System.out.println("I am A")
}
}
public class B extend A{
public void saySomething(){
System.out.println("I am B")
}
}
public static void main(String[] args){
A bb=new B();
bb.saySomething();
}
依赖倒转原则(Dependency Inversion Principle,DIP)
定义:
- 高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。
- 抽象不应该依赖于具体实现,具体实现应该依赖于抽象。
为了降低客户和实现之间的耦合,DIP要求程序依赖于抽象接口,不要依赖具体的实现。
接口隔离原则(Interface Segregation Principle,ISP)
定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干。
合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)
合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新的对象通过向这些对象的委派达到复用已有功能的目的。它的设计原则是:要尽量使用合成/聚合,尽量不要使用继承。
在Java中,应尽量针对Interface编程,而非实现类。这样,更换子类不会影响调用它方法的代码。要让各个类尽可能少的跟别人联系,扩展性和维护性才能提高。
最小知道原则/迪米特法则(Principle of Least Knowledge,PLK)
一个对象应对其他对象有尽可能少的了解,降低各个模块的耦合。