赞
踩
抽象工厂模式是对简单工厂模式的一个变种,它允许通过一个统一的接口来创建不同的产品实例,而无需指定具体的子类。在这个模式中,我们只关心产品的抽象接口,而将具体的产品实现留给子类去实现。这样,我们可以通过创建不同的工厂对象来创建不同的产品实例,而无需关心它们实际实现的是哪个具体产品。
抽象工厂模式的实现分为以下几个步骤:
优点
:
缺点
:
以下以智能产品汽车和手机为例,继承关系如下:
/**
* 智能产品抽象工厂
*/
public interface SmartProductFactory {
ISmartPhone createSmartPhone();
ISmartCar createSmartCar();
}
/** * @author physicx * @date 2023/5/17 上午11:18 * @desc 华为工厂 * Created with IntelliJ IDEA */ public class HuaweiFactory implements SmartProductFactory { @Override public ISmartPhone createSmartPhone() { return new HuaweiSmartPhone(); } @Override public ISmartCar createSmartCar() { return new HuaweiSmartCar(); } }
/** * @author guogq * @date 2023/5/17 上午11:18 * @desc 小米工厂 * Created with IntelliJ IDEA */ public class XiaomiFactory implements SmartProductFactory { @Override public ISmartPhone createSmartPhone() { return new XiaomiSmartPhone(); } @Override public ISmartCar createSmartCar() { return new XiaomiSmartCar(); } }
/**
* 智能手机
*/
public interface ISmartPhone {
void printInfo();
}
/**
* 智能汽车
*/
public interface ISmartCar {
void printInfo();
}
/**
* @author physicx
* @date 2023/5/17 上午11:19
* @desc 华为智能汽车
* Created with IntelliJ IDEA
*/
public class HuaweiSmartCar implements ISmartCar {
@Override
public void printInfo() {
System.out.println("华为智能汽车");
}
}
/**
* @author guogq
* @date 2023/5/17 上午11:19
* @desc 华为智能手机
* Created with IntelliJ IDEA
*/
public class HuaweiSmartPhone implements ISmartPhone {
@Override
public void printInfo() {
System.out.println("华为智能手机");
}
}
/**
* @author guogq
* @date 2023/5/17 上午11:19
* @desc 小米智能汽车
* Created with IntelliJ IDEA
*/
public class XiaomiSmartCar implements ISmartCar {
@Override
public void printInfo() {
System.out.println("小米智能汽车");
}
}
/**
* @author guogq
* @date 2023/5/17 上午11:19
* @desc 小米智能手机
* Created with IntelliJ IDEA
*/
public class XiaomiSmartPhone implements ISmartPhone {
@Override
public void printInfo() {
System.out.println("小米智能手机");
}
}
public static void main(String[] args) {
HuaweiFactory huaweiFactory = new HuaweiFactory();
huaweiFactory.createSmartPhone().printInfo();
huaweiFactory.createSmartCar().printInfo();
XiaomiFactory xiaomiFactory = new XiaomiFactory();
xiaomiFactory.createSmartPhone().printInfo();
xiaomiFactory.createSmartCar().printInfo();
}
打印如下:
工厂方法模式和抽象工厂模式都是创建型模式,区别如下:
总之,工厂方法是由子类自行决定实例化那个类,而抽象工厂是自己决定实例化哪个类。至于是组合还是继承还是实现接口都无所谓。根本区别在于是自己实例化还是子类实例化。
如果产品单一,只有一个产品等级结构适合使用工厂方法模式。如果存在多个产品等级,产品分类多个可以形成产品族合适使用抽象工厂模式。
后续会依次更新 详解java 23种设计模式,欢迎关注、交流、补充相关内容(如下)。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。