Head First设计模式- 工厂方法

设计模式的代码仓库:
设计模式
在这里插入图片描述
具体定义:
工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。
工厂方法让类把实例化推迟到子类。

优点:
用户并不知道什么具体产品类被实例化
当系统扩展需要添加新的产品对象时,仅仅需要添加一个具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也不需要修改客户端,很好地符合了“开闭原则”。
工厂自主决定创建什么对象

缺点:
复杂度

依赖倒置

public abstract class Pizza {
    public String name;
    public String dough;
    public String sauce;
    public ArrayList toppings = new ArrayList();

    public void Prepare() {
        System.out.println("Preparing" + name);
        System.out.println("Tossingdough...");
        System.out.println("Addingsauce..");
        System.out.println("Addingtoppings: ");
        for (int i = 0; i < toppings.size(); i++) {
            System.out.println(" " + toppings.get(i));
        }
    }

    public void Bake() {
        System.out.println("Bakefor 25 minutes at 350");
    }

    public void Cut() {
        System.out.println("Cuttingthe pizza into diagonal slices");
    }

    public void Box() {
        System.out.println("Placepizza in official PizzaStore box");
    }

    public String GetName() {
        return name;
    }

}
public abstract class PizzaStore
{
    public Pizza OrderPizza(String type)
    {
        Pizza pizza = CreatePizza(type);
        pizza.Prepare();
        pizza.Bake();
        pizza.Cut();
        pizza.Box();

        return pizza;
    }

    //抽象出创建Pizza的工厂方法,由子类实现该方法并创建具体的Pizza
    public abstract Pizza CreatePizza(String type);

}
public class MYPizzaStore extends PizzaStore {

    @Override
    public Pizza CreatePizza(String type) {
        Pizza pizza = null;
        switch (type) {
            case "cheese":
                pizza = new NYStyleCheesePizza();
                break;
            default:
                break;
        }
        return pizza;
    }

}
public class NYStyleCheesePizza extends Pizza {

    public NYStyleCheesePizza() {
        name = "NY StyleSauc and Cheese Pizza";
        dough = "Thin Crust Dough";
        sauce = "Marinara Sauce";
        toppings.add("GratedReggiano Cheese");
    }

}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值