HeadFirst设计模式---简单工厂

Posted lollipop_hsu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HeadFirst设计模式---简单工厂相关的知识,希望对你有一定的参考价值。

简单工厂的理解

简单工厂不是设计模式的一种,只是代码规范而且。也就是说构造一个披萨工厂出来,按不同味道生产不同的披萨。

类图

技术图片

抽象披萨

public abstract class AbstractPizza {
    public void prepare() {
        System.out.println("prepare pizza");
    }
    public void bake(){
        System.out.println("bake pizza");
    }
    public void cut(){
        System.out.println("cut pizza");
    }
    public void box(){
        System.out.println("pizza box");
    }
}

实体披萨

public class CheeseAbstractPizza extends AbstractPizza {
    @Override
    public void prepare() {
        System.out.println("prepare CheesePizza");
    }
}
public class GreekAbstractPizza extends AbstractPizza {
    @Override
    public void prepare() {
        System.out.println("prepare GreekPizza");
    }
}
public class PepperoniAbstractPizza extends AbstractPizza {
    @Override
    public void prepare() {
        System.out.println("prepare PepperoniPizza");
    }
}

披萨工厂

public class SimpleFactory {

    public AbstractPizza createPizza(String type) {
        if ("cheesePizza".equals(type)) {
            return new CheeseAbstractPizza();
        } else if ("greekPizza".equals(type)) {
            return new GreekAbstractPizza();
        } else if ("pepperoniPizza".equals(type)) {
            return new PepperoniAbstractPizza();
        }
        return null;
    }
}

披萨商店

public class PizzaStore {
    SimpleFactory simplefactory = null;

    PizzaStore(SimpleFactory simplefactory){
        this.simplefactory = simplefactory;
    }

    public void orderPizza(String type) {
        AbstractPizza abstractPizza = simplefactory.createPizza(type);
        abstractPizza.prepare();
        abstractPizza.cut();
        abstractPizza.bake();
        abstractPizza.box();
    }

    public static void main(String[] args) {
        PizzaStore store = new PizzaStore(new SimpleFactory());
        store.orderPizza("cheesePizza");
    }
}

运行结果

prepare CheesePizza
cut pizza
bake pizza
pizza box

总结

  1. 简单工厂代码简单,易理解。
  2. 提供一个入参,可以得到相应的对象
  3. 违背了开闭原则

以上是关于HeadFirst设计模式---简单工厂的主要内容,如果未能解决你的问题,请参考以下文章

工厂模式&抽象工厂——HeadFirst设计模式学习笔记

HeadFirst设计模式

Headfirst设计模式的C++实现——简单工厂模式(Simple Factory)之二

Head First设计模式——简单工厂工厂抽象工厂

设计模式之简单工厂工厂方法抽象工厂

Headfirst设计模式的C++实现——抽象工厂(Abstract Factory)