abstract factory 模式 -> 简单工厂模式的变种 -> 最复杂的一个变种

    场景:

    • 就是我们现在要生产的不是一个一个产品,而一个一个的产品组合;
    • 比如说我们有产品 ABC,现在第一种产品组合是 A+B,第二种产品组合是 B+C,第三种产品组合是 A+C;
    • 就是要对工厂模式进行进一步的增强

    这种模式就更复杂了,在实际开发场景中,更加少见了。因为其核心思想是,如果需要一个工厂,这个工厂可以生产出相关联的一批产品,然后不同的工厂实现,会生产出一批不同的产品组合。
    image.png

    1. package com.example.designpattern.factory;
    2. public class AbstractFactoryPatternDemo {
    3. public static void main(String[] args) {
    4. // 产品A1+产品B1 => 产品A1+产品B3
    5. ProductA firstProductA = Factory1.get().createProductA();
    6. ProductB firstProductB = Factory1.get().createProductB();
    7. firstProductA.execute();
    8. firstProductB.execute();
    9. //产品A2+产品B2
    10. ProductA secondProductA = Factory2.get().createProductA();
    11. ProductB secondProductB = Factory2.get().createProductB();
    12. secondProductA.execute();
    13. secondProductB.execute();
    14. //产品A3+产品B3
    15. ProductA thirdProductA = Factory3.get().createProductA();
    16. ProductB thirdProductB = Factory3.get().createProductB();
    17. thirdProductA.execute();
    18. thirdProductB.execute();
    19. // 哪怕你有100个地方定义了产品组合,要调整组合的逻辑,只要修改一个工厂就可以了
    20. }
    21. public interface ProductA {
    22. void execute();
    23. }
    24. public static class ProductA1 implements ProductA {
    25. public void execute() {
    26. System.out.println("产品A1的功能逻辑");
    27. }
    28. }
    29. public static class ProductA2 implements ProductA {
    30. public void execute() {
    31. System.out.println("产品A2的功能逻辑");
    32. }
    33. }
    34. public static class ProductA3 implements ProductA {
    35. public void execute() {
    36. System.out.println("产品A3的功能逻辑");
    37. }
    38. }
    39. public interface ProductB {
    40. void execute();
    41. }
    42. public static class ProductB1 implements ProductB {
    43. public void execute() {
    44. System.out.println("产品B1的功能逻辑");
    45. }
    46. }
    47. public static class ProductB2 implements ProductB {
    48. public void execute() {
    49. System.out.println("产品B2的功能逻辑");
    50. }
    51. }
    52. public static class ProductB3 implements ProductB {
    53. public void execute() {
    54. System.out.println("产品B3的功能逻辑");
    55. }
    56. }
    57. public interface Factory {
    58. ProductA createProductA();
    59. ProductB createProductB();
    60. }
    61. public static class Factory1 implements Factory{
    62. public static final Factory1 instance = new Factory1();
    63. public static Factory get(){
    64. return instance;
    65. }
    66. public ProductA createProductA() {
    67. return new ProductA1();
    68. }
    69. public ProductB createProductB() {
    70. return new ProductB3();
    71. }
    72. }
    73. public static class Factory2 implements Factory{
    74. public static final Factory2 instance = new Factory2();
    75. public static Factory get(){
    76. return instance;
    77. }
    78. public ProductA createProductA() {
    79. return new ProductA2();
    80. }
    81. public ProductB createProductB() {
    82. return new ProductB2();
    83. }
    84. }
    85. public static class Factory3 implements Factory{
    86. public static final Factory3 instance = new Factory3();
    87. public static Factory get(){
    88. return instance;
    89. }
    90. public ProductA createProductA() {
    91. return new ProductA3();
    92. }
    93. public ProductB createProductB() {
    94. return new ProductB3();
    95. }
    96. }
    97. }