统一对象创建--简单工厂模式
创建对象在面向对象程序设计中几乎无处不在,在Java中实例化一个对象是通过new关键字实现的,对对象的赋值、尤其是复杂对象的赋值往往是一个相对复杂的过程。工厂模式的作用就是对对象的创建过程进行封装的一个过程。根据不同的业务场景,工厂模式又分为:简单工厂模式、工厂方法模式、抽象工厂模式。本次总结先说下“简单工厂模式”:
简单工厂模式
简单工厂模式一般是把对象的创建过程单独提取到一个工厂类中进行,工厂类中的对象创建方法一般都是静态方法。这种方式的好处是,这个工厂类可以多处使用,能保证对象的创建过程的一致性(全局统一),以及代码的复用性。类图也很简单:
这里以模拟商场下单来说明“简单工厂模式”的用法,可以把Client看做是一个网上商场,提供一个orderProduct的下单方法。Iproduct是商品接口类,ProductA和ProductB是具体的实现,商品经过生产、打包、运输送到客户手里。下面来看具体的实现:
目标对象实现
首先看下商品基类Iproduct,以及其两个具体的商品实现类ProductA和ProductB
Iproduct
public interface Iproduct { //生产 void create(); //打包 void packages(); //运输 void transport(); }
ProductA
public class ProductA implements Iproduct{ public void create() { System.out.println("商品A生产完成"); } public void packages() { System.out.println("商品A打包完成"); } public void transport() { System.out.println("商品A运输完成"); } }
ProductB
public class ProductB implements Iproduct { public void create() { System.out.println("商品B生产完成"); } public void packages() { System.out.println("商品B打包完成"); } public void transport() { System.out.println("商品B运输完成"); } }
工厂类实现
商品接口类和实现类实现完成后,再来看下工厂类ProductFactory,其静态方法会根据不用的参数类型生产出不同的商品,给对象赋值是一个负责的业务逻辑,这里省略。
public class ProductFactory { /** * 静态工厂方法 * @param type * @return */ public static Iproduct createProduct(String type){ if("A".equals(type)){ //省略对象赋值过程 return new ProductA(); }else if ("B".equals(type)){ //省略对象赋值过程 return new ProductB(); } return null; } }
Client业务类实现
接下来看下Client类,可以把这个类看做是一个网上商城,提供一个下单方法:
public class Client { /** * 下单方法,选择不同的商品类型进行购买 * @param type */ public void orderProduct(String type){ Iproduct product = ProductFactory.createProduct(type); //生产商品 product.create(); //打包商品 product.packages(); //运输商品 product.transport(); System.out.println("订单完成"); } }
整个模式的实现完毕,最后创建main方法进行测试:
public class Main { public static void main(String[] args) { Client client = new Client();//创建商城 client.orderProduct("A");//选择购买"A"商品 client.orderProduct("C");//选择购买不存在的"C"商品 } }
运行main方法,打印信息如下:
产品A生产完成 产品A打包完成 产品A运输完成 购买商品A的订单完成 商城没有该商品,请选择A、B商品进行购买
小结
简单工厂模式,总的来说使用起来比较简单,需要注意的是商品必须要有一个基类Iproduct(并不局限为接口,也可以是抽象类),这样在Client类中可以实现面向接口编程,而不必在意具体的实现,但还不够彻底,ProductFactory还是具体的实现类。如果需要创建的对象数目较少,且对象类目单一,使用简单工厂模式实现也是不错的选择。
出处:
http://moon-walker.iteye.com/blog/2396985
上一篇: 设计模式之从简单工厂到泛型简单工厂
下一篇: 设计模式之工厂模式--简单工厂