简介
相对于工厂模式更加抽象,能创建更多商品,如手机,电视,洗衣机,不单单是一类产品
增加产品时不用修改抽象工厂,但需要修改其他的工厂类
主要模块
- 抽象工厂
- 抽象产品
- 真实工厂
- 真实产品
例子
抽象工厂
//抽象工厂
public interface AbstractFactory {
//可以生产多种商品
//生产杯子
CupProduct newCup();
//生产手机
PhoneProduct newPhone();
}
抽象产品(手机)
public interface PhoneProduct {
void call();
}
抽象产品(杯子)
public interface CupProduct {
void drink();
}
真实产品(苹果手机)
public class ApplePhone implements PhoneProduct {
@Override
public void call() {
System.out.println("ApplePhone");
}
}
真实产品(三星手机)
public class SumPhone implements PhoneProduct {
@Override
public void call() {
System.out.println("SumPhone");
}
}
真实产品(水杯)
public class WaterCup implements CupProduct {
@Override
public void drink() {
System.out.println("WaterCup");
}
}
真实产品(牛奶杯)
public class MilkCup implements CupProduct{
@Override
public void drink() {
System.out.println("MilkCup");
}
}
真实工厂(苹果-水杯工厂)
public class Factory1 implements AbstractFactory {
@Override
public CupProduct newCup() {
return new WaterCup();
}
@Override
public PhoneProduct newPhone() {
return new ApplePhone();
}
}
真实工厂(三星-牛奶杯工厂)
public class Factory2 implements AbstractFactory {
@Override
public CupProduct newCup() {
return new MilkCup();
}
@Override
public PhoneProduct newPhone() {
return new SumPhone();
}
}
测试
public class Main {
public static void main(String[] args) {
//苹果水杯工厂
Factory1 factory1 = new Factory1();
//三星牛奶工厂
Factory2 factory2 = new Factory2();
//生产 苹果手机
factory1.newPhone().call();//ApplePhone
//生产 三星手机
factory2.newPhone().call();//SumPhone
//生产 水杯
factory1.newCup().drink();//WaterCup
//生产 牛奶杯
factory2.newCup().drink();//MilkCup
}
}