@H_404_0@ 简单举一个例子:关于动物吃东西的问题。 @H_404_0@ 编写一个类用于描述动物吃东西:
package com.kiritor; /** * @author Kiritor * 动物类的描述*/ class Animal { public void eatFood(String name) { System.out.println(name+"吃草"); } } public class Client { public static void main(String[] args) { Animal animal = new Animal(); animal.eatFood("羊"); animal.eatFood("牛"); } }不过这里问题就来了,并不是所有动物都吃草的啊,也有肉食动物的。在不违背单一 @H_404_0@ 原则的情况下,我们必须将动物类细分为,肉食性和素食性的。
class AnimalMeat { public void eatFood(String name) { System.out.println(name+"吃肉"); } } class AnimalGlass { public void eatFood(String name) { System.out.println(name+"吃草"); } } public class Client { public static void main(String[] args) { AnimalGlass animal = new AnimalGlass(); animal.eatFood("羊"); AnimalMeat animal2 = new AnimalMeat(); animal2.eatFood("老虎"); } }@H_404_0@ 由上述代码可以知道,这种修改的开销还是挺大的,不仅需要添加新类,还要修改客户 @H_404_0@ 端代码。有事还不如这样修改:
class Animal{ public void eatFoodGlass(String animal){ System.out.println(animal+"吃草"); } public void eatFoodMeat(String animal){ System.out.println(animal+"吃肉"); } } public class Client{ public static void main(String[] args){ Animal animal = new Animal(); animal.eatFoodGlass("牛"); animal.eatFoodGlass("羊"); animal.eatFoodMeat("老虎"); } }造成上述的结果就是在使用单一原则的情况下,对于"职责"的划分没有一个明确的标准,如果 @H_404_0@ 把职责划分过细反而会造成接口和实现类的数量剧曾,反倒不利于维护和阅读。所以在使用这个 @H_404_0@ 原则的时候还是要具体问题具体分析。 @H_404_0@ 建议就是接口一定要采用单一职责原则,实现类的设计上尽可能做到单一职责原则,最好是一个 @H_404_0@ 原因引起一个类的变化。