设计模式之工厂模式

简单工厂

  简单工厂其实不是一个设计模式,反而更像一种编程习惯。如下,将产生Pizza的代码分离出来作为工厂。

public class SimplePizzaFactory {
    public Pizza createPizza(String type) {
        Pizza pizza = null;

        if ("cheese".equals(type)) {
            pizza = new CheesePizza();
        } else if ("clam".equals(type)) {
            pizza = new ClamPizza();
        }
        return pizza;
    }
}

工厂方法

工厂方法:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。

  如下就是一个工厂方法的示意图。

工厂方法

  PizzaStore中定义了一个抽象方法createPizza,然后由子类来决定如何进行实例化。

public abstract class PizzaStore {
    public Pizza orderPizza(String type) {
        Pizza pizza;

        pizza = createPizza(type);

        //其他操作

        return pizza;
    }

    abstract Pizza createPizza(String type);
}

public class WuHanPizzaStore extends PizzaStore {
    @Override
    Pizza createPizza(String type) {
        Pizza pizza = null;

        if ("cheese".equals(type)) {
            pizza = new CheesePizza();
        } else if ("clam".equals(type)) {
            pizza = new ClamPizza();
        }
        return pizza;
    }
}

抽象工厂

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

  如下就是一个抽象工厂示意图。

抽象工厂

  如下PizzaIngredientFactory接口就是一个抽象工厂,在相关的家族类中实现这个接口,编写特定的创建实例方法。

public interface PizzaIngredientFactory {
    public Cheese createCheese();
    public Clam createClam();
}

public class WuHanPizzaIngredientFactory implements PizzaIngredientFactory {
    @Override
    public Cheese createCheese() {
        return new ReggianoCheese();
    }
    @Override
    public Clam createClam() {
        return new FreshClam();
    }
}
原文地址:https://www.cnblogs.com/liuyang0/p/6391425.html