抽象工厂模式

x33g5p2x  于2022-03-08 转载在 其他  
字(1.9k)|赞(0)|评价(0)|浏览(343)

1.概念

提供一个创建一系列相关或者相互依赖对象的接口,无需指定具体的类

2. 案例(我们这里创建的对象,ProductA1与ProductB1对象是关联的)

1.抽象工厂

  1. package com.yl.design;
  2. // 抽象工厂
  3. public interface AbstractFactory {
  4. public AbstractProductA createAbstractProductA();
  5. public AbstractProductB createAbstractProductB();
  6. }

2.产品A的接口以及其实现类

  1. package com.yl.design;
  2. // 抽象产品A的接口
  3. public interface AbstractProductA {
  4. public void display();
  5. }
  1. package com.yl.design;
  2. //产品A的具体实现
  3. public class ProductA1 implements AbstractProductA {
  4. @Override
  5. public void display() {
  6. System.out.println("display: ProductA1");
  7. }
  8. }
  1. package com.yl.design;
  2. //产品A的具体实现
  3. public class ProductA2 implements AbstractProductA {
  4. @Override
  5. public void display() {
  6. System.out.println("display: ProductA2");
  7. }
  8. }

3.产品B的接口以及其实现类

  1. package com.yl.design;
  2. //抽象产品B的接口
  3. public interface AbstractProductB {
  4. public void display();
  5. }
  1. package com.yl.design;
  2. //产品B的具体实现
  3. public class ProductB1 implements AbstractProductB {
  4. @Override
  5. public void display() {
  6. System.out.println("display: ProductB1");
  7. }
  8. }
  1. package com.yl.design;
  2. //产品B的具体实现
  3. public class ProductB2 implements AbstractProductB {
  4. @Override
  5. public void display() {
  6. System.out.println("display: ProductB2");
  7. }
  8. }

4.两个具体的工厂实现类

  1. package com.yl.design;
  2. //具体的工厂实现类
  3. public class ConCreateFactory1 implements AbstractFactory {
  4. @Override
  5. public AbstractProductA createAbstractProductA() {
  6. return new ProductA1();
  7. }
  8. @Override
  9. public AbstractProductB createAbstractProductB() {
  10. return new ProductB1();
  11. }
  12. }
  1. package com.yl.design;
  2. //具体的工厂实现类
  3. public class ConCreateFactory2 implements AbstractFactory {
  4. @Override
  5. public AbstractProductA createAbstractProductA() {
  6. return new ProductA2();
  7. }
  8. @Override
  9. public AbstractProductB createAbstractProductB() {
  10. return new ProductB2();
  11. }
  12. }

5.测试

  1. package com.yl.design;
  2. public class Test {
  3. public static void main(String[] args) {
  4. //创建抽象工厂对象
  5. AbstractFactory abstractFactory = new ConCreateFactory1();
  6. //通过工厂来创建一系列对象
  7. AbstractProductA productA = abstractFactory.createAbstractProductA();
  8. AbstractProductB productB = abstractFactory.createAbstractProductB();
  9. productA.display();
  10. productB.display();
  11. }
  12. }

相关文章