Java实现
简单工厂
简单工厂应该是最简单的工厂方法了,也是最常见的。下面,通过代码就知道为什么这么说了。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| 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; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| 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一下,要修改初始化条件时,也只需要修改工厂方法即可。
工厂方法
定义:
工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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; } }
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| 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实现
简单工厂
举一个如下的业务场景:需要开发一个表单生成器,需要做到表单元素的自动生成。那么,可以采用简单工厂来创建表单元素对象。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| (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中工厂方法模式的使用,一时想不到使用场景,感觉有点为了用设计模式而设计模式,所以这里就不再举例了。
上一篇:设计模式系列之四装饰者模式
下一篇:设计模式系列之六命令模式
留言
欢迎交流想法。留言会通过 GitHub Issues 保存,首次使用需要登录 GitHub。