ToB企服应用市场:ToB评测及商务社交产业平台

标题: java设计模式【抽象工厂模式】 [打印本页]

作者: 饭宝    时间: 2023-5-17 14:14
标题: java设计模式【抽象工厂模式】
java设计模式【抽象工厂模式】

抽象工厂模式

抽象工厂模式是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而无需关心它们实际实现的是哪个具体产品。
抽象工厂模式的实现分为以下几个步骤:
优缺点

优点:
缺点:
使用场景

具体实现

以下以智能产品汽车和手机为例,继承关系如下:

定义抽象工厂
  1. /**
  2. * 智能产品抽象工厂
  3. */
  4. public interface SmartProductFactory {
  5.     ISmartPhone createSmartPhone();
  6.     ISmartCar createSmartCar();
  7. }
复制代码
具体工厂
  1. /**
  2. * @author physicx
  3. * @date 2023/5/17 上午11:18
  4. * @desc 华为工厂
  5. * Created with IntelliJ IDEA
  6. */
  7. public class HuaweiFactory implements SmartProductFactory {
  8.     @Override
  9.     public ISmartPhone createSmartPhone() {
  10.         return new HuaweiSmartPhone();
  11.     }
  12.     @Override
  13.     public ISmartCar createSmartCar() {
  14.         return new HuaweiSmartCar();
  15.     }
  16. }
复制代码
  1. /**
  2. * @author guogq
  3. * @date 2023/5/17 上午11:18
  4. * @desc 小米工厂
  5. * Created with IntelliJ IDEA
  6. */
  7. public class XiaomiFactory implements SmartProductFactory {
  8.     @Override
  9.     public ISmartPhone createSmartPhone() {
  10.         return new XiaomiSmartPhone();
  11.     }
  12.     @Override
  13.     public ISmartCar createSmartCar() {
  14.         return new XiaomiSmartCar();
  15.     }
  16. }
复制代码
定义抽象产品
  1. /**
  2. * 智能手机
  3. */
  4. public interface ISmartPhone {
  5.     void printInfo();
  6. }
复制代码
  1. /**
  2. * 智能汽车
  3. */
  4. public interface ISmartCar {
  5.     void printInfo();
  6. }
复制代码
具体产品
  1. /**
  2. * @author physicx
  3. * @date 2023/5/17 上午11:19
  4. * @desc 华为智能汽车
  5. * Created with IntelliJ IDEA
  6. */
  7. public class HuaweiSmartCar implements ISmartCar {
  8.     @Override
  9.     public void printInfo() {
  10.         System.out.println("华为智能汽车");
  11.     }
  12. }
复制代码
  1. /**
  2. * @author guogq
  3. * @date 2023/5/17 上午11:19
  4. * @desc 华为智能手机
  5. * Created with IntelliJ IDEA
  6. */
  7. public class HuaweiSmartPhone implements ISmartPhone {
  8.     @Override
  9.     public void printInfo() {
  10.         System.out.println("华为智能手机");
  11.     }
  12. }
复制代码
  1. /**
  2. * @author guogq
  3. * @date 2023/5/17 上午11:19
  4. * @desc 小米智能汽车
  5. * Created with IntelliJ IDEA
  6. */
  7. public class XiaomiSmartCar implements ISmartCar {
  8.     @Override
  9.     public void printInfo() {
  10.         System.out.println("小米智能汽车");
  11.     }
  12. }
复制代码
  1. /**
  2. * @author guogq
  3. * @date 2023/5/17 上午11:19
  4. * @desc 小米智能手机
  5. * Created with IntelliJ IDEA
  6. */
  7. public class XiaomiSmartPhone implements ISmartPhone {
  8.     @Override
  9.     public void printInfo() {
  10.         System.out.println("小米智能手机");
  11.     }
  12. }
复制代码
客户端调用
  1. public static void main(String[] args) {
  2.         HuaweiFactory huaweiFactory = new HuaweiFactory();
  3.         huaweiFactory.createSmartPhone().printInfo();
  4.         huaweiFactory.createSmartCar().printInfo();
  5.         XiaomiFactory xiaomiFactory = new XiaomiFactory();
  6.         xiaomiFactory.createSmartPhone().printInfo();
  7.         xiaomiFactory.createSmartCar().printInfo();
  8.     }
复制代码
打印如下:

工厂方法模式和抽象工厂模式区别

工厂方法模式和抽象工厂模式都是创建型模式,区别如下:
总之,工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。至于是组合还是继承还是实现接口都无所谓。根本区别在于是自己实例化还是子类实例化。
如果产品单一,只有一个产品等级结构适合使用工厂方法模式。如果存在多个产品等级,产品分类多个可以形成产品族合适使用抽象工厂模式。
补充说明

后续会依次更新 详解java 23种设计模式,欢迎关注、交流、补充相关内容(如下)。
快捷导航设计模式简介总结单例模式详解工厂方法模式抽象工厂模式
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4