设计模式之工厂方法和抽象工厂

简单工厂不是工厂模式,只是一种用法的习惯。

 

工厂方法模式:定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。(可以说工厂方法是一个特殊的模板方法)

public abstract class PizzaStore{

  public Pizza orderPizza(String type){

    Pizza pizza;

    pizza=createPizza(type);

    pizza.pareare();

    pizza.bake();

    pizza.cut();

    pizza.box();

 

    return pizza;

  }

  protected abstract Pizza createPizza(Stirng type);       //客户程序中关于超类的代码和子类对象创建代码解耦了

}

 

pizza的种类如果有很多的话,我们将它抽象化,把它设计成一个接口或者是一个抽象的类(使用依赖倒置原则将向下的依赖倒置成向上的依赖,pizza的子类依赖pizza)。

 

遵从OO设计中的指导方针:

  变量不可以持有具体类的引用。

  不要让类派生自具体类。

  不要覆盖基类中已实现的方法。

 

当我们的pizza的工厂需要做的原料不相同该怎么办,那不我们为每种pizza的原料创建一种工厂。

我们可以为工厂定义一个接口,这个接口负责创建所有的原料:

public interface PizzaIngredienFactory{

  public Dough createDough();

  public Sauce createSauce();

  public Cheese createCheese();

  public Veggies[] createVeggies();

}

抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。

posted @ 2016-08-23 15:25  玉曲风  阅读(148)  评论(0编辑  收藏  举报