<其它设计模式介绍及案例源码下载 >
简介:抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。
主要解决:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。
优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。
缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象的 Creator 里加代码,又要在具体的里面加代码。
使用场景: 一般用于具有产品树和产品族的场景下,如:QQ 换皮肤,将所有界面相应的节点都进行切换
例如下:
//抽象产品 2.abstract class BenzCar{ 3. private String name; 4. 5. public abstract void drive(); 6. 7. public String getName() { 8. return name; 9. } 10. public void setName(String name) { 11. this.name = name; 12. } 13.} 14.//具体产品(Bmw和Audi同理) 15.class BenzSportCar extends BenzCar{ 16. public void drive(){ 17. System.out.println("开奔驰跑车"); 18. } 19.} 20.class BenzBusinessCar extends BenzCar{ 21. public void drive(){ 22. System.out.println("开奔驰商务车"); 23. } 24.} 25. 26.abstract class BmwCar{ 27. private String name; 28. 29. public abstract void drive(); 30. 31. public String getName() { 32. return name; 33. } 34. public void setName(String name) { 35. this.name = name; 36. } 37.} 38.class BmwSportCar extends BmwCar{ 39. public void drive(){ 40. System.out.println("开宝马跑车"); 41. } 42.} 43.class BmwBusinessCar extends BmwCar{ 44. public void drive(){ 45. System.out.println("开宝马商务车"); 46. } 47.} 48. 49.abstract class AudiCar{ 50. private String name; 51. 52. public abstract void drive(); 53. 54. public String getName() { 55. return name; 56. } 57. public void setName(String name) { 58. this.name = name; 59. } 60.} 61.class AudiSportCar extends AudiCar{ 62. public void drive(){ 63. System.out.println("开奥迪跑车"); 64. } 65.} 66.class AudiBusinessCar extends AudiCar{ 67. public void drive(){ 68. System.out.println("开奥迪商务车"); 69. } 70.} 71. 72. 73.//抽象工厂 74.abstract class Driver{ 75. public abstract BenzCar createBenzCar(String car) throws Exception; 76. 77. public abstract BmwCar createBmwCar(String car) throws Exception; 78. 79. public abstract AudiCar createAudiCar(String car) throws Exception; 80.} 81.//具体工厂 82.class SportDriver extends Driver{ 83. public BenzCar createBenzCar(String car) throws Exception { 84. return new BenzSportCar(); 85. } 86. public BmwCar createBmwCar(String car) throws Exception { 87. return new BmwSportCar(); 88. } 89. public AudiCar createAudiCar(String car) throws Exception { 90. return new AudiSportCar(); 91. } 92.} 93.class BusinessDriver extends Driver{ 94. public BenzCar createBenzCar(String car) throws Exception { 95. return new BenzBusinessCar(); 96. } 97. public BmwCar createBmwCar(String car) throws Exception { 98. return new BmwBusinessCar(); 99. } 100. public AudiCar createAudiCar(String car) throws Exception { 101. return new AudiBusinessCar(); 102. } 103.} 104. 105.//老板 106.public class BossAbstractFactory { 107. 108. public static void main(String[] args) throws Exception { 109. 110. Driver d = new BusinessDriver(); 111. AudiCar car = d.createAudiCar(""); 112. car.drive(); 113. } 114.}