天天看点

java solid设计原则_02 java中的solid原则

问题

java中的solid原则是什么

答案

Single Responsibility Principle:单一职责原则

一个方法只做一件事情只有一个职责,一个类只做一组相关的事情、承担相近的职责。如果方法做了多个事情,当别人想使用这个方法中的第一个事情时,其他事情也不得不发生,如此一来就得拆分这个方法。如果这个方法在定义的时候就做一件事情,那么就不会被拆分,维护起来也方便好多,对于类也有这种约束。这就是单一职责原则。请看下面的代码:

//下面这个方法就不符合单一职责原则,因为调用者只想使用该方法创建一个数组,

//但是莫名其妙该数组被打印了出来;应该将打印的语句抽象成另外一个方法。

public static int[] createArrays(int length)

{

int[] arrays = new int[length];

Random rd = new Random();

for (int i = 0; i < arrays.length; i++)

{

arrays[i] = rd.nextInt(100);

}

//这一句话应该作为另一个方法被抽象出去

System.out.println(Arrays.toString(arrays));

return arrays;

}

Open Closed Principle:开闭原则

软件应该对修改源代码关闭,对扩展新功能开发,也就是说扩展新功能的时候最好是新代码。那么该如何做到这一点呢,面向接口编程。所谓面向接口编程就是完成一个功能之前,先定义对应的接口,调用者务必调用接口去使用该功能。请看下面的代码:

* Operator.java

public interface Operator {

int exec(int a,int b);

}

* Add.java

public class Add implements Operator {

@Override

public int exec(int a, int b) {

return a+b;

}

}

* Test.java

public class Test {

public static void main(String[] args) {

Operator operator = new Add();

System.out.println(operator.exec(1,2));

}

}

倘若此时要增加乘法运算,只需要新增一个Multy.java类即可,无需修改原来的Add.java

Liskov Substitution Principle:里氏替换原则

继承有其优势,可以减少代码重复,增加复用;然而,继承破坏了封装性,因此经常强调组合多于继承,就是既能增加复用也不破坏封装性。LSP原则通俗的来讲就是凡是父类出现的地方,都能用子类代替,具体要求有两个:子类必须完全实现父类的方法,调用的时候用父类调用;子类实现父类的方法输入参数最好放大。

Law of Demeter:迪米特法则

又叫最少知识原则,即一个类对其他类知道地越少越好,如此一来,类之间的联系就减少到了不得不有才会有的程度,耦合性就会低很多。联系少了,复杂度就降低了,系统的稳定性就会好很多,即大道至简。

Interface Segregation Principle:接口隔离原则

这与单一职责一脉相承,如果单一职责说的是类,那么ISP特指的就是接口。一个接口能分成多个接口就要分成多个接口,不能使用单一的接口。如果用户不得不使用单一的接口,那么用户也将不得不依赖了他不用的方法,那么用户也将不得不承担他不用的那些方法的改变对他的影响。因此,接口如果能拆分就应该拆分,换言之,接口中的方法要少,要集中。这就是接口隔离原则。

Dependence Inversion Principle:依赖倒置原则

是指成高层不应该直接依赖底层,而应该依赖于底层的抽象。抽象不应该依赖细节,细节应该依赖抽象,抽象比细节要稳定可靠的多。DIP的一个关键体现就是面向接口编程。

六大原则相互解释和重合,都是为了提高代码的健壮性,可维护性以及可扩展性。