1、接口隔离原则
定义:客户端不应该依赖它不需要的接口;一个类对另一个类的依赖应该建立在最小的接口上。
理解:不要让类去实现接口中该类不需要实现的方法。
实例:
//类A只需要功能m1,类B只需要功能m2,但是把接口定义太复杂,太臃肿,类A和类B都必须实现接口I中其他本类不需要的方法
interface I{
public void m1();
public void m2();
public void m3();
}
class A implements I{
public void m1(){System.out.print("类A需要功能m1")};
public void m2(){};
public void m3(){};
}
class B implements I{
public void m2(){System.out.print("类B需要功能m2")};
public void m1(){};
public void m3(){};
}
//采用接口隔离原则,将接口I拆分为独立的几个接口,然后让类A和类B分别去实现拥有他们所需功能的接口,这样类A和类B中也不会有多余的冗余代码
interface I1{
public void m1();
}
interface I2{
public void m2();
}
interface I3{
public void m3();
}
class A implements I1{
public void m1(){System.out.print("类A需要功能m1")};
}
class B implements I2{
public void m2(){System.out.print("类B需要功能m2")};
}
2、迪米特法则
定义:一个对象应该对其他对象保持最少的了解。
理解:掌握低耦合、高内聚的思想;尽量不要让类依赖类,如果依赖类了,尽量让被依赖的类方法public,成员private;陌生的、你不需要了解的类,尽量不要出现在你的局部变量中。
实例:迪米特法则经典实例,请看博客中的《代理模式--介绍、应用及代码》一文。点击打开链接
3、开闭原则
定义:一个软件实体如类、模块和函数应对扩展开放,对修改关闭。
理解:除非BUG,当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有代码来实现变化。也就是你可以通过增加Public方法来扩展功能,但是不要修改已有代码,尤其是框架。开闭原则核心:用抽象构建框架,用实现扩展细节。
实例:将前面讲过的5种原则应用好了,开闭原则就实现了。
-----总结-----
单一职责原则:实现类要职责单一
里氏替换原则:尽量不要重写或重载父类,不要破坏继承体系
依赖倒置原则:多面向接口编程
接口隔离原则:设计接口要精简单一
迪米特法则:低耦合、高内聚,没必要去了解你所依赖的类或接口的全部,也不需要与你不想了解的类成为直接朋友。
开闭原则:总纲。对外扩展开放,修改关闭!!!