概念
抽象工厂模式为创建型模式该模式与简单工厂模式相比,该模式用一个超级工厂的概念,该超级工厂又去创建其他工厂,是其他工厂的父工厂;
UML
现在有一个食品工厂,里面有饮料生产车间和披萨生产车间,用户生成不一样的饮料和披萨:
![](https://img.haomeiwen.com/i15320518/14f72758f2be2bd6.png)
- 食品工厂
public abstract class ParentFactory {
public abstract Drink createDrink(String type);
public abstract Pizza createPizza(String type);
}
- 饮料工厂
public class DrinkFactory extends ParentFactory{
@Override
public Drink createDrink(String type){
Drink drink=null;
if (type.equals("coffee")){
drink = new Coffee();
}else if (type.equals("mike")){
drink = new Mike();
}
return drink;
}
@Override
public Pizza createPizza(String type) {
return null;
}
}
- 牛奶
public class Mike extends Drink {
@Override
public void getDrink() {
System.out.println("牛奶");
}
}
- 咖啡
public class Coffee extends Drink {
@Override
public void getDrink() {
System.out.println("获取咖啡");
}
}
- 披萨工厂
public class PizzaFactory extends ParentFactory {
@Override
public Pizza createPizza(String type){
Pizza pizza=null;
if (type.equals("1")){
pizza=new CheesePizza("起司");
}else {
pizza=new GreekPizza("希腊风味");
}
return pizza;
}
@Override
public Drink createDrink(String type) {
return null;
}
}
- 起司披萨
public class CheesePizza extends Pizza {
public CheesePizza(String name) {
super(name);
}
@Override
void getPizza() {
System.out.println(getName()+"披萨");
}
}
- 希腊风味披萨
public class GreekPizza extends Pizza {
public GreekPizza(String name) {
super(name);
}
@Override
public void getPizza(){
System.out.println(getName()+"披萨");
}
}
- 工厂调用
public abstract class ParentFactory {
public abstract Drink createDrink(String type);
public abstract Pizza createPizza(String type);
}
网友评论