设计模式系列之五工厂模式
来源:互联网 发布: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
- 设计模式系列之五工厂模式
- 设计模式之工厂系列
- 设计模式之(五、工厂方法模式)
- 设计模式之五--Factory_Method工厂模式
- Java设计模式(五) 之 工厂模式
- 设计模式之五工厂方法模式
- 设计模式系列之 工厂模式
- 设计模式系列之抽象工厂模式
- java设计模式系列之工厂模式
- 设计模式系列之二:工厂模式
- 设计模式系列之五:代理模式
- 设计模式系列之五:适配器模式
- 设计模式之工厂模式系列(简单工厂,工厂模式,抽象工厂模式)
- 设计模式系列(五)——抽象工厂模式
- 工厂模式----设计模式系列
- 设计模式系列-工厂模式
- 设计模式系列-工厂模式
- 设计模式系列一之简单工厂
- cls的石头
- Android四大组件之Activity
- springmvc拦截器配置
- HTML CSS 鼠标样式效果
- 模仿与学习MyBatis - 1.6 注解与Session:sql语句
- 设计模式系列之五工厂模式
- mysql 主从同步 主主同步 高可用
- 什么是野指针
- Centos安装sqlmap、nmap、metasploit
- HTTP请求格式和HTTP响应格式
- 如何使用GDB调试段错误
- oracle 11g sqlplus命令行登录出现协议适配器错误
- Android开发之XML文件的解析的三种方法--转载(三)
- 打包时不用再写task,轻轻松松自定义architecture