一、前言
- 通常很多人都认为设计模式原则是六个,而我这里写了七个。大家不要以为是写错了。多余的话就不说了,往下看就行知道了。
二、单一职责原则
2.1、概念
- 对于类来说,即一个类应该只负责一项职责。如果类A负责两个不同的职责:职责1、指责2。当职责1需求改更而改变A时,可能会造成职责2执行错误。所以需要将类A分解为A1、A2。
2.2、代码演示
- 下面举一个交通工具运行的例子。
现在有一个类,用来负责交通工具运行。如下,但是假设现在传递进来的是飞机,就会出现飞机在地上跑这种情况,然而这种情况显然是不对的。
public class Vehicle{
public void run(String name) {
Sysout.out.printfln(name + ":在地上跑");
}
}
public interface Vehicle{
public void run(String name);
}
public class AirVehicle implements Vehicle{
@Override
public void run(String name) {
System.out.println(name + "在天上飞");
}
}
public class WaterVehicle implements Vehicle{
@Override
public void run(String name) {
Sysout.out.println(name + "在水里跑");
}
}
public class LandVehicle implements Vehicle{
@Override
public void run(String name) {
Sysout.out.println(name + "在陆地上跑");
}
}
public class Test{
public static void main(String[] args) {
LandVehicle lv = new LandVehicle();
lv.run("汽车");
}
}
通过将每个类的职能分离出来,从而实现类的纯粹化,即就是单一职责原则;
2.2、单一职责原则注意事项和细节
- 降低类的复杂度。一个类只负责一项职责。
- 提高类的可读性,可维护性。
- 降低类因为变更而引起的风险。
- 通常情况下,我们应该遵守单一职责原则,只有逻辑足够简单,才可以在代码级别违反单一职责原则。只有类中方法数量足够少,可以在方法级别保持单一职责原则。
三、接口隔离原则
3.1、基本介绍
- 客户端不应该依赖他不需要的接口,即一个类对另一个类的依赖应该建立在最小接口上。
3.2、传统方法的问题和使用接口隔离原则改进
- 类A通过接口interface依赖B,类C通过·接口interface依赖类D,如果接口interface对于类A和类C来说不是最小的接口,那么类B和类D必须去2实现他们不需要的方法;
- 将接口interface拆分为独立的几个接口,类A和类C分别与他们1需要的接口建立依赖关系。也就是采用接口隔离原则。
3.3、代码演示
- 在正式开始之前,先举一个有问题的例子,方便理解。
- ClassB依赖于ClassA,去调用func1();但是只需要调用func1()方法,但是ClassA却要实现接口里所有的方法,所以这样写就会使得Class过于复杂。
public interface Interface{
public void func1();
public void func2();
public void func3();
public void func4();
public void func5();
}
public class ClassA implements Interface{
@Override
public void func1() {
}
@Override
public void func2() {
}
@Override
public void func3() {
}
@Override
public void func4() {
}
@Override
public void func5() {
}
}
public class ClassB{
public void depend1(Interface i) {
i.func1();
}
}
public class Test {
public static void main(String[] args) {
ClassB b= new ClassB();
b.depend1(new ClassA());
}
}
- 因此,提出了接口隔离原则。其实所谓的接口隔离原则就是将一个接口进行分解,将方法分到不同的接口中去。
|