抽象工厂模式
1.定义:
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
2.用途:
使用抽象工厂创建同一个产品族的产品
3.产品族与产品等级结构
可以这样理解:
产品等级结构:空心椭圆是手机,实心椭圆是手表,实心矩形是电脑
产品族:华为、苹果、小米
那么抽象工厂实现的就是创建同一个品牌的不同产品
4.抽象工厂的四个角色
抽象工厂:声明创建抽象对象产品对象的一个接口
具体工厂:实现创建具体产品对象的操作
抽象对象:为一类产品对象声明一个接口
具体对象:定义一个将被相应具体工厂创建的产品对象。
5.抽象工厂模式的简单实现
public interface IFactory {//抽象工厂
Phone makePhone();//创建手机
Watch makeWatch();//创建手表
}
public class HuaWei implements IFactory {//华为
@Override
public Phone makePhone() {
return new PhoneWithHuaWei();//创建华为手机
}
@Override
public Watch makeWatch() {//创建华为手表
return new WatchWithHuaWei();
}
}
public class PingGuo implements IFactory {//苹果
@Override
public Phone makePhone() {//创建苹果手机
return new PhoneWithPingGuo();
}
@Override
public Watch makeWatch() {//创建苹果手表
return new WatchWithPingGuo();
}
}
public interface Phone {//手机
void doA();
}
public interface Watch {//手表
void doB();
}
public class PhoneWithHuaWei implements Phone {//华为手机
@Override
public void doA() {
System.out.println("华为手机");
}
}
public class PhoneWithPingGuo implements Phone {//苹果手机
@Override
public void doA() {
System.out.println("苹果手机");
}
}
public class WatchWithHuaWei implements Watch {//华为手表
@Override
public void doB() {
System.out.println("华为手表");
}
}
public class WatchWithPingGuo implements Watch {//苹果手表
@Override
public void doB() {
System.out.println("苹果手表");
}
}
public class Client {
public static void main(String[] args) {
//华为创建华为的产品
IFactory huaWei = new HuaWei();
Phone hwPthone = huaWei.makePhone();
Watch hwWatch = huaWei.makeWatch();
//苹果创建苹果的产品
IFactory pingGuo = new PingGuo();
Phone pgPhone = pingGuo.makePhone();
Watch pgWatch = pingGuo.makeWatch();
hwPthone.doA();
hwWatch.doB();
pgPhone.doA();
pgWatch.doB();
}
}