第2篇 简单工厂模式

来源:互联网 发布:禁忌的边界线知乎 编辑:程序博客网 时间:2024/05/16 01:48
         在本文咱们先来了解一下,简单的工厂模式,简单的工厂模式不属于23种设计模式,但是工厂方法模式是属于23种设计模式的。要了解工厂方法模式先得了解一下简单工厂模式,一步一步,慢慢来就好了。突然想起来小时候学的一篇文章,《走一步,再走一步》,相信大家应该熟悉吧。面对巨大的困难,不要去想他有多困难,你只要想着走一步,再走一步,在巨大的困难也会解决的。完,扯远了。算是对自己的鼓励吧。
         1.什么是工厂模式
         先从我们的生活出发,在我们的生活中,我们每个人得以生存下去,必须需要各种各样的物品。但是,我们当自己需要什么产品的时候就自己去生产吗?好像不是这样的。有可能是我是一个面包师,我只生产面包。其他所有人需要面包都到我这里来买。而我需要火腿的时候我就去找生产火腿的人来买。其实这就是工厂模式了,好多东西我们需要的时候不自己去生产,而是找工厂去拿。在我们的程序中也是这样的,当一个类需要哪个对象的实例的时候,自己new多麻烦啊,找工厂去获得。这便是工厂模式。
         2.为什么是工厂模式
    那么,我们为什么要使用工厂模式呢?使用它有什么好处吗?
首先,程序中到处充斥着一个对象的创建和初始化工作,会使代码看起来比较凌乱。
其次,对于需要多个参数初始化对象的时候,一个地方改了,其他的地方都得跟着改。
再者,如果每个类是需要什么就自己去创建的话,那么这个类的未免太复杂,功能太多。
再者,工厂模式符合软件工程“高内聚低耦合”的特点
其实工厂模式还有很多特点.....就不一一赘述了。

         3.工厂模式如何定义

首先我们先来简单定义一下“物品”,物品有各种各样的,但是他们都是物品,这里我们用接口来定义一下物品类:

  package com.john;  public interface Product {    void operation();   }
     然后我们再来定义各种各样的物品:
     物品1:

package com.john;public class Product1 implements Product {@Overridepublic void operation() {}}
    物品2:

package com.john;public class Product2 implements Product {@Overridepublic void operation() {}}
    在这里就先定义两个物品吧。接下来我们定义工厂,工厂嘛,自然就是生产物品的地方咯!
        package com.john;public class Factory {public static Product createProduct(String productName){//根据传入参数的不同生产不同的对象if("1".equals(productName)){return new Product1();}else if("2".equals(productName)){return new Product2();}return null;}}

     我们来看看这个工厂,你只要告诉他我需要物品几,他便会给你返回你要的物品了。是不是很方便啊?但是问题来了,在我们的工厂中如果有365种产品要生产呢?那我岂不是要if-else-if很多次啊?其实我们可以利用Java的反射机制,让你一次if-else也不用写。下面是改进的工厂类:

package com.john;public class Factory {public static Product createProduct(String productName){//根据传入参数的不同生产不同的对象Product product = null;String classname = "com.john."+productName;//forName这个方法中传入的是类名,要注意加上包名哦try {product = (Product)Class.forName(classname).newInstance();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}return product;}}
这样我们就省去了很多的if-else,是不是很方便呢?好了,简单的工厂模式就先到这里了!下一篇说工厂方法模式。



0 0
原创粉丝点击