📅  最后修改于: 2023-12-03 15:10:06.779000             🧑  作者: Mango
抽象工厂模式是一种创建型设计模式,它提供了一种封装一组工厂方法(即“抽象工厂”)的方式,用于创建一些相关或相互依赖对象的家族,而无需指定实际实现类。
当有多个抽象产品类时,且工厂只负责创建同一族中的产品对象,这时可以使用抽象工厂模式。
当要求一个系统有独立于它的产品的多个系列时,可以使用抽象工厂模式。
当一个对象族的产品并多余一个抽象类时,使用抽象工厂模式。
当类的可扩展性必须要考虑时,应当使用抽象工厂模式
// 定义手机产品接口
public interface Phone {
String getBrand(); // 获取手机品牌
void call(String number); // 打电话
}
// 定义电视产品接口
public interface TV {
String getBrand(); // 获取电视品牌
void play(String channel); // 播放频道
}
// 小米手机
public class XiaomiPhone implements Phone {
@Override
public String getBrand() {
return "小米";
}
@Override
public void call(String number) {
System.out.println("使用小米手机拨打电话:" + number);
}
}
// 小米电视
public class XiaomiTV implements TV {
@Override
public String getBrand() {
return "小米";
}
@Override
public void play(String channel) {
System.out.println("使用小米电视播放频道:" + channel);
}
}
// 华为手机
public class HuaweiPhone implements Phone {
@Override
public String getBrand() {
return "华为";
}
@Override
public void call(String number) {
System.out.println("使用华为手机拨打电话:" + number);
}
}
// 华为电视
public class HuaweiTV implements TV {
@Override
public String getBrand() {
return "华为";
}
@Override
public void play(String channel) {
System.out.println("使用华为电视播放频道:" + channel);
}
}
public interface ProductFactory {
Phone createPhone(); // 创建手机
TV createTV(); // 创建电视
}
// 小米产品工厂
public class XiaomiFactory implements ProductFactory {
@Override
public Phone createPhone() {
return new XiaomiPhone();
}
@Override
public TV createTV() {
return new XiaomiTV();
}
}
// 华为产品工厂
public class HuaweiFactory implements ProductFactory {
@Override
public Phone createPhone() {
return new HuaweiPhone();
}
@Override
public TV createTV() {
return new HuaweiTV();
}
}
public class Test {
public static void main(String[] args) {
ProductFactory xiaomiFactory = new XiaomiFactory(); // 创建小米产品工厂
Phone xiaomiPhone = xiaomiFactory.createPhone(); // 创建小米手机
TV xiaomiTV = xiaomiFactory.createTV(); // 创建小米电视
ProductFactory huaweiFactory = new HuaweiFactory(); // 创建华为产品工厂
Phone huaweiPhone = huaweiFactory.createPhone(); // 创建华为手机
TV huaweiTV = huaweiFactory.createTV(); // 创建华为电视
xiaomiPhone.call("123456");
xiaomiTV.play("CCTV-1");
huaweiPhone.call("7890");
huaweiTV.play("CCTV-2");
}
}
使用小米手机拨打电话:123456
使用小米电视播放频道:CCTV-1
使用华为手机拨打电话:7890
使用华为电视播放频道:CCTV-2