设计模式-抽象工厂模式(Abstract Factory Pattern)

我就是我 2022-05-13 11:42 266阅读 0赞

抽象工厂模式和工厂模式的要素是一样的。但是抽象工厂模式是提供一系列相关或者相互依赖对象的接口,而无需指定他们具体的类。

比如我们上一篇模块中举的例子。

我们有运动员接口,有体育总局这个工厂接口,可以生产出不同的运动员协会,不同的远动员协会生产不同的运动员,那么我们可以让体育总局生产出不同的运动器材给不同的体育协会。让

70 抽象工厂示意图

他们自己的运动员使用。这就抽象工厂模式。

简单例子

  1. package myDesignPatternsTest.abstrcFactoryPattern;
  2. public interface Athletes {
  3. public void run(SportsEquipment sportsEquipment);
  4. public void eat();
  5. public void sleep();
  6. }
  7. package myDesignPatternsTest.abstrcFactoryPattern;
  8. public interface SportsEquipment {
  9. public void create();
  10. }
  11. package myDesignPatternsTest.abstrcFactoryPattern;
  12. public interface SimpleFactory {
  13. public Athletes CreateAthletes();
  14. public SportsEquipment CreateEquipment();
  15. }
  16. package myDesignPatternsTest.abstrcFactoryPattern;
  17. public class RunEquiment implements SportsEquipment {
  18. @Override
  19. public void create() {
  20. System.out.println("跑步器材");
  21. }
  22. }
  23. package myDesignPatternsTest.abstrcFactoryPattern;
  24. public class RunAthletes implements Athletes {
  25. @Override
  26. public void run(SportsEquipment sportsEquipment) {
  27. sportsEquipment.create();
  28. System.out.println("长跑运动员在跑");
  29. }
  30. @Override
  31. public void eat() {
  32. System.out.println("长跑运动员在吃");
  33. }
  34. @Override
  35. public void sleep() {
  36. System.out.println("长跑运动员在谁");
  37. }
  38. }
  39. package myDesignPatternsTest.abstrcFactoryPattern;
  40. public class RunFactory implements SimpleFactory {
  41. @Override
  42. public Athletes CreateAthletes() {
  43. return new RunAthletes();
  44. }
  45. @Override
  46. public SportsEquipment CreateEquipment() {
  47. return new RunEquiment();
  48. }
  49. }
  50. package myDesignPatternsTest.abstrcFactoryPattern;
  51. public class SwingEquiment implements SportsEquipment {
  52. @Override
  53. public void create() {
  54. System.out.println("游泳器材");
  55. }
  56. }
  57. public class Swing implements Athletes {
  58. @Override
  59. public void run(SportsEquipment sportsEquipment) {
  60. sportsEquipment.create();
  61. System.out.println("游泳运动员在游泳");
  62. }
  63. @Override
  64. public void eat() {
  65. System.out.println("游泳运动员在吃");
  66. }
  67. @Override
  68. public void sleep() {
  69. System.out.println("游泳运动员在睡");
  70. }
  71. }
  72. package myDesignPatternsTest.abstrcFactoryPattern;
  73. public class SwingFactory implements SimpleFactory {
  74. @Override
  75. public Athletes CreateAthletes() {
  76. return new Swing();
  77. }
  78. @Override
  79. public SportsEquipment CreateEquipment() {
  80. return new SwingEquiment();
  81. }
  82. }
  83. package myDesignPatternsTest.abstrcFactoryPattern;
  84. public class Client {
  85. public static void main(String[] args) {
  86. /* SimpleFactory simpleFactory=new SimpleFactory();
  87. Athletes runAthletes=simpleFactory.CreateAthletes("Run");
  88. runAthletes.eat();
  89. runAthletes.run();
  90. runAthletes.sleep();
  91. Athletes swing=simpleFactory.CreateAthletes("Swing");
  92. swing.sleep();
  93. swing.run();
  94. swing.eat();*/
  95. SimpleFactory runFactory=new RunFactory();
  96. SimpleFactory swingFactory = new SwingFactory();
  97. Athletes runAthletes=runFactory.CreateAthletes();
  98. SportsEquipment sportsEquipment=runFactory.CreateEquipment();
  99. runAthletes.eat();
  100. runAthletes.run(sportsEquipment);
  101. runAthletes.sleep();
  102. Athletes swing=swingFactory.CreateAthletes();
  103. SportsEquipment swingE=swingFactory.CreateEquipment();
  104. swing.sleep();
  105. swing.run(swingE);
  106. swing.eat();
  107. }
  108. }
  109. 长跑运动员在吃
  110. 跑步器材
  111. 长跑运动员在跑
  112. 长跑运动员在谁
  113. 游泳运动员在睡
  114. 游泳器材
  115. 游泳运动员在游泳
  116. 游泳运动员在吃

发表评论

表情:
评论列表 (有 0 条评论,266人围观)

还没有评论,来说两句吧...

相关阅读