读书人

倚赖倒转原则和工厂模式

发布时间: 2012-09-01 09:33:03 作者: rapoo

依赖倒转原则和工厂模式

依赖倒转原则讲的是:要依赖于抽象,不要信赖于实现。 这是为实现开闭原则的一种手段。

?

比如之前的代码,我们的主程序中:

Graph g = new xxx();

......

g.getArea();

?

对g的声明则是Graph,而非具体的三角或者原型。我们下面的一切对g的操作,都是依赖Graph,而非对具体的图形的依赖。但只有在初始化g的时候,我们必须制定三角Graph g = new Triangl()或者圆形Graph g = new Circle();这就和依赖倒转原则冲突。由此引入工厂模式。

?

简单工厂模式:

package sty;

public class GraphFactory {

??? public static Graph createGraph(String type) {
??? ??? Graph g = null;
??? ??? if(type.equals("triangle"))
??? ??? ??? g = new Triangle();
??? ??? if(type.equals("Circle"))
??? ??? ??? g = new Circle();
??? ??? return g;
??? }
}

?

抽象工厂模式,直接从别人哪儿拷贝来的代码

  1. //??产品?Plant接口?????? ?? public?interface?Plant?{ ??
  2. } ?? ??
  3. //?具体产品PlantA,PlantB ?? public?class?PlantA?implements?Plant?{ ??
  4. ?? ????public?PlantA()?{ ??
  5. ????????System.out.println("?create?PlantA?!?"); ?? ????} ??
  6. ?? ????public?void?doSomething()?{ ??
  7. ????????System.out.println("??PlantA?do?something??"); ?? ????} ??
  8. } ?? ??
  9. public?class?PlantB?implements?Plant?{ ?? ????public?PlantB()?{ ??
  10. ????????System.out.println("?create?PlantB?!?"); ?? ????} ??
  11. ?? ????public?void?doSomething()?{ ??
  12. ????????System.out.println("??PlantB?do?something??"); ?? ????} ??
  13. } ?? ??
  14. //?产品?Fruit接口 ?? public?interface?Fruit?{ ??
  15. } ?? ??
  16. //?具体产品FruitA,FruitB ?? public?class?FruitA?implements?Fruit?{ ??
  17. ????public?FruitA()?{ ?? ????????System.out.println("?create?FruitA?!?"); ??
  18. ????} ?? ??
  19. ????public?void?doSomething()?{ ?? ????????System.out.println("??FruitA?do?something??"); ??
  20. ????} ?? } ??
  21. ?? public?class?FruitB?implements?Fruit?{ ??
  22. ????public?FruitB()?{ ?? ????????System.out.println("?create?FruitB?!?"); ??
  23. ????} ?? ??
  24. ????public?void?doSomething()?{ ?? ????????System.out.println("??FruitB?do?something??"); ??
  25. ????} ?? } ??
  26. ?? //?抽象工厂方法 ??
  27. public?interface?AbstractFactory?{ ?? ????public?Plant?createPlant(); ??
  28. ?? ????public?Fruit?createFruit(); ??
  29. } ?? ??
  30. //?具体工厂方法 ?? public?class?FactoryA?implements?AbstractFactory?{ ??
  31. ????public?Plant?createPlant()?{ ?? ????????return?new?PlantA(); ??
  32. ????} ?? ??
  33. ????public?Fruit?createFruit()?{ ?? ????????return?new?FruitA(); ??
  34. ????} ?? } ??
  35. ?? public?class?FactoryB?implements?AbstractFactory?{ ??
  36. ????public?Plant?createPlant()?{ ?? ????????return?new?PlantB(); ??
  37. ????} ?? ??
  38. ????public?Fruit?createFruit()?{ ?? ????????return?new?FruitB(); ??
  39. ????} ?? }??

?

?

读书人网 >互联网

热点推荐