抽象工厂模式

抽象工厂(抽象工厂类):它是所有具体工厂的父类,声明了创建一个产品族的方法,并由其子类去实现。抽象工厂也可以声明成接口。
我们用一个具体的例子说明:

  1. // A 产品的抽象
  2. abstract class AbstractProductA {
  3. abstract methodA(): void;
  4. }
  5. // B 产品的抽象
  6. abstract class AbstractProductB {
  7. abstract methodB(): void;
  8. }
  9. // 抽象工厂,声明了创造 A 产品和 B 产品的抽象方法
  10. abstract class AbstractFactory {
  11. abstract createProductA(): AbstractProductA;
  12. abstract createProductB(): AbstractProductB;
  13. }
  14. // A 产品
  15. class ProductA extends AbstractProductA {
  16. constructor(value: String) {
  17. super();
  18. console.log(value);
  19. }
  20. methodA(): void { }
  21. }
  22. // B 产品
  23. class ProductB extends AbstractProductB {
  24. constructor(value: String) {
  25. super();
  26. console.log(value);
  27. }
  28. methodB(): void { }
  29. }
  30. // 深圳工厂,能够生产 A B 两个产品,同时告知产地是深圳
  31. class ShenzhenFactory extends AbstractFactory {
  32. createProductA(): ProductA {
  33. return new ProductA('ProductA made in Shenzhen');
  34. }
  35. createProductB(): ProductB {
  36. return new ProductB('ProductB made in Shenzhen');
  37. }
  38. }
  39. // 上海工厂,能够生产 A B 两个产品,同时告知产地是上海
  40. class ShanghaiFactory extends AbstractFactory {
  41. createProductA(): ProductA {
  42. return new ProductA('ProductA made in Shanghai');
  43. }
  44. createProductB(): ProductB {
  45. return new ProductB('ProductB made in Shanghai');
  46. }
  47. }