抽象工厂模式介绍
工厂方法模式在同一个产品族下扩展新产品显得得心应手,那么设想有以下情景:我们有多个产品族,如果手机产品族、饮料产品族、服装产品族,其中各个产品族里有多种产品。
我们有不同的客户,每个客户都要这个产品族里的一种产品,于是就产生了多种产品的组合,此时我们可以使用抽象工厂模式来应对这个场景。
抽象工厂模式样例
从上文介绍出发,我们有Phone、Drink两个产品族:
public abstract class Phone {
}
public abstract class Drink {
}
Phone产品族下有智能手机和儿童手机两个产品
public class SmartPhone extends Phone {
}
public class ChildPhone extends Phone {
}
Drink产品族下有啤酒和牛奶两个产品
public class Beer extends Milk {
}
public class Milk extends Drink {
}
生产Phone产品族和生产Drink产品族的抽象工厂
public abstract class PhoneDrinkFactory {
public abstract Phone createPhone();
public abstract Drink createDrink();
}
面向成人客户,生产智能手机和生产啤酒的工厂
public class FactoryForAdult extends PhoneDrinkFactory{
@Override
public Phone createPhone() {
return new SmartPhone();
}
@Override
public Drink createDrink() {
return new Beer();
}
}
面向儿童客户,生产儿童手机和牛奶的工厂
public class FactoryForChild extends PhoneDrinkFactory{
@Override
public Phone createPhone() {
return new ChildPhone();
}
@Override
public Drink createDrink() {
return new Milk();
}
}
可见,抽象工厂很适合在多个产品族中进行产品搭配,但是在同一个产品族下新增产品却需要大刀阔斧地改动代码。