设计模式——工厂方法模式

2019-07-29  本文已影响0人  prik丶

《Head First 设计模式》 学习笔记,码云同步更新中

如有错误或不足之处,请一定指出,谢谢~

目录

查看其它设计模式笔记,点这里→设计模式笔记汇总

工厂方法模式(Factory Method Pattern)

/**
 * 披萨店超类
 **/
public abstract class PizzaStore {

    public Pizza orderPizza(String type) {

        // 把创建披萨方法从简单工厂拿回来
        Pizza pizza = createPizza(type);

        pizza.prepare();
        pizza.bake();
        pizza.cut();
        pizza.box();

        return pizza;
    }

    /**
     * 将实例化披萨的责任移到抽象方法中,这个方法就等同于一个工厂
     * 子类通过这个方法来执行对象实例化逻辑,达到超类和子类解耦的目的
     */
    abstract Pizza createPizza(String type);

}

/**
 * 上海加盟店
 **/
public class SHPizzaStore extends PizzaStore {
    @Override
    protected Pizza createPizza(String type) {
        if (type.equals("cheese")) {
            return new SHCheesePizza();
        } else if (type.equals("veggie")) {
            return new SHVeggiePizza();
        }
        return null;
    }
}

// 其他加盟店略

/**
 * 披萨超类
 **/
public interface Pizza {
    /**
     * 准备
     */
    void prepare();

    /**
     * 烘焙
     */
    void bake();

    /**
     * 切片
     */
    void cut();

    /**
     * 装盒
     */
    void box();
}

/**
 * 上海芝士披萨
 **/
public class SHCheesePizza implements Pizza{

    @Override
    public void prepare() {
    }

    @Override
    public void bake() {
    }

    @Override
    public void cut() {
    }

    @Override
    public void box() {
        System.out.println("上海风味芝士披萨完成...");
    }
}

// 其他种类披萨略

/**
 * 测试类
 **/
public class Test {
    public static void main(String[] args) {
        // 首先需要一个上海披萨店
        SHPizzaStore shPizzaStore = new SHPizzaStore();
        // 然后点单
        Pizza pizza = shPizzaStore.orderPizza("cheese");
    }
}

结果:
    上海风味芝士披萨完成...
上一篇下一篇

猜你喜欢

热点阅读