抽象工厂

先来看看抽象工厂的UML图


看到了吧,唯一的区别就是工厂创建了多个对象,当然,还是在工厂子类中创建的,这一点和工厂模式是一致的
C#版本代码  

  1. /*其实工厂和抽象工厂没有多大区别,只不过是抽象工厂生产的商品是多个而已
  2. 通俗的说,就是抽象工厂模式的具体工厂里面会有多个实例具体对象的方法
  3. 更直观的就是,抽象工厂模式每个工厂一次造多个玩意,而工厂模式的每个工厂只造一个玩意*/
  4. public abstract class Product
  5. {
  6. public abstract void work();
  7. }
  8. public class ProductA : Product
  9. {
  10. public override void work()
  11. {
  12. Console.Write("ProductA");
  13. }
  14. }
  15. public class ProductB : Product
  16. {
  17. public override void work()
  18. {
  19. Console.Write("ProductB");
  20. }
  21. }
  22. public abstract class Car
  23. {
  24. public abstract void Build();
  25. }
  26. public class CarA : Car
  27. {
  28. public override void Build()
  29. {
  30. Console.Write("Build CarA");
  31. }
  32. }
  33. public class CarB : Car
  34. {
  35. public override void Build()
  36. {
  37. Console.Write("Build CarB");
  38. }
  39. }
  40. public abstract class AbstractFactory
  41. {
  42. //工厂生产多个对象
  43. public abstract Product newproduct();
  44. public abstract Car newCar();
  45. }
  46. public class AbstractFactoryA : AbstractFactory
  47. {
  48. public override Product newproduct()
  49. {
  50. return new ProductA();//子类里面实现具体的实例化
  51. }
  52. public override Car newCar()
  53. {
  54. return new CarA();
  55. }
  56. }
  57. public class AbstractFactoryB : AbstractFactory
  58. {
  59. public override Product newproduct()
  60. {
  61. return new ProductB();//子类里面实现具体的实例化
  62. }
  63. public override Car newCar()
  64. {
  65. return new CarB();
  66. }
  67. }

  68. public class AbstractFactoryClient
  69. {
  70. public static void GetFactoryMethod()
  71. {
  72. AbstractFactory factorysubA = new AbstractFactoryA();
  73. AbstractFactory factorysubB = new AbstractFactoryA();

  74. Product pruductA = factorysubA.newproduct();
  75. Product pruductB = factorysubB.newproduct();
  76. Car factorycarA = factorysubA.newCar();

  77. factorycarA.Build();

  78. pruductA.work();
  79. pruductB.work();
  80. }
  81. }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值