设计模式系列之五工厂模式

来源:互联网 发布:vb数值转字符串 编辑:程序博客网 时间:2024/05/02 04:42

Java实现

简单工厂

  简单工厂应该是最简单的工厂方法了,也是最常见的。下面,通过代码就知道为什么这么说了。

public class SimplePizzaFactory {    public Pizza createPizza(String type) {        Pizza pizza = null;        if (type.equals("cheese")) {            pizza = new CheesePizza();        } else if (type.equals("pepperoni")) {            pizza = new PepperoniPizza();        } else if (type.equals("clam")) {            pizza = new ClamPizza();        } else if (type.equals("veggie")) {            pizza = new VeggiePizza();        }        return pizza;    }}
public class PizzaStore {    SimplePizzaFactory factory;    public PizzaStore(SimplePizzaFactory factory) {        this.factory = factory;    }    public Pizza orderPizza(String type) {        Pizza pizza;        //通过简单工厂创建不同类型的披萨        pizza = factory.createPizza(type);        pizza.prepare();        pizza.bake();        pizza.cut();        pizza.box();        return pizza;    }}

  通过简单工厂方法,有效的把new Object()解耦了出来。在实际的业务中,不用再去关心如何去创建对象。特别是对象的创建与初始化很复杂,且有很多地方都需要用到该对象时,就不用每个地方都去显示的new一下,要修改初始化条件时,也只需要修改工厂方法即可。

工厂方法

定义:

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

public abstract class PizzaStore {    //具体如何创建披萨交由子类去实现(注意对比这里跟简单工厂的区别)    abstract Pizza createPizza(String item);    public Pizza orderPizza(String type) {        Pizza pizza = createPizza(type);        System.out.println("--- Making a " + pizza.getName() + " ---");        pizza.prepare();        pizza.bake();        pizza.cut();        pizza.box();        return pizza;    }}
//纽约风格的披萨public class NYPizzaStore extends PizzaStore {    Pizza createPizza(String item) {        if (item.equals("cheese")) {            return new NYStyleCheesePizza();        } else if (item.equals("veggie")) {            return new NYStyleVeggiePizza();        } else if (item.equals("clam")) {            return new NYStyleClamPizza();        } else if (item.equals("pepperoni")) {            return new NYStylePepperoniPizza();        } else return null;    }}
//芝加哥风格的披萨public class ChicagoPizzaStore extends PizzaStore {    Pizza createPizza(String item) {            if (item.equals("cheese")) {                    return new ChicagoStyleCheesePizza();            } else if (item.equals("veggie")) {                    return new ChicagoStyleVeggiePizza();            } else if (item.equals("clam")) {                    return new ChicagoStyleClamPizza();            } else if (item.equals("pepperoni")) {                    return new ChicagoStylePepperoniPizza();            } else return null;    }}

抽象工厂

  在所有的工厂模式中,还有一种叫抽象工厂模式。不过一直无法理解抽象工厂模式的具体使用场景,所以这部分留着今后对抽象工厂模式理解深刻了再来总结吧。

Javascript实现

简单工厂

  举一个如下的业务场景:需要开发一个表单生成器,需要做到表单元素的自动生成。那么,可以采用简单工厂来创建表单元素对象。

(function () {    function SampleFormFactory() {    }    SampleFormFactory.fn = SampleFormFactory.prototype;    SampleFormFactory.fn.getFormElement = function (type) {        switch (type){            case "Input":                return new Input();            case "Select":                return new Select();            case "Textarea":                return new Textarea();            case "Radio":                return new Radio();            case "Checkbox":                return new Checkbox();        }    };    /*****************标准表单对象*****************/    function Input() {    }    function Select() {    }    function Textarea() {    }    function Radio() {    }    function Checkbox() {    }    //使用简单工厂创建表单元素    var factory = new SampleFormFactory();    var element = factory.getFormElement("Input");})();

  至于在javascript中工厂方法模式的使用,一时想不到使用场景,感觉有点为了用设计模式而设计模式,所以这里就不再举例了。

上一篇:设计模式系列之四装饰者模式
下一篇:设计模式系列之六命令模式

0 0
原创粉丝点击