java模式-工厂模式

今天在学习工厂模式,从最简单的简单工厂模式开始。

我们现在需要通过工厂Factory生产A,B两款产品(都是产品,实现了接口Product)。

产品A:

public class A implements Product {

    public A() {
        System.err.println("生产了产品A");
    }

}

产品B:

public class B implements Product {

    public B() {
        System.err.println("生产了产品B");
    }

}

A,B实现的接口Product:

public interface Product {

}

接下来就是我们用来实例化A,B的工厂类:

public class Factory {
    public Product create(int i) throws Exception {
        switch (i) {
        case 1:
            return new A();
        case 2:
            return new B();
        default:
            throw new Exception("没有该产品。");
        }
    }
    
    public static void main(String[] args) throws Exception {
        Factory f=new Factory();
        f.create(1);
        f.create(2);
        f.create(3);
    }
}

简单工厂中只有一个工厂,这个工厂可以接收参数,并根据参数来决定返回什么样的实体。所有创建的工作都由该工厂完成。

简单工厂有一个不方便的地方在于,当我们需要需要新增一种产品,比如产品C,这时候我们不仅需要新建C的实体类,还需要修改工厂类的方法。如果需要生产的产品足够多,我们工厂类则会显得十分复杂,各种判断。

 

这时候我们就思考了,可不可以让一个工厂只生产一种产品呢,这样工厂类内部就简单了。

如下,我们先定义一个借口Product,所有可以生产产品的工厂类都要实现这个接口。

/**
 * <p>
 * 
 * 工厂类接口
 *       </p>
 *
 * @author wangchao
 *
 * @version 1.0.0
 *
 * @since 1.0.0
 *
 */
public interface FactoryInterface {
    //创建方法
    public Product create();
}

实现了这个接口的工厂:

/**
 * <p>
 * 工厂A,专门负责生产A类产品
 * </p>
 *
 * @author wangchao
 *
 * @version 1.0.0
 *
 * @since 1.0.0
 *
 */
public class FactoryA implements FactoryInterface {

    @Override
    public Product create() {return new A();
    }

}
/**
 * <p>
 * 工厂B,专门负责生产B类产品
 * </p>
 *
 * @author wangchao
 *
 * @version 1.0.0
 *
 * @since 1.0.0
 *
 */
public class FactoryB implements FactoryInterface {

    public Product create() {
        return new B();
    }

}

这样的话,每一个工厂的实现就非常简单了。但是这样还是有一个问题,我们需要为为一个产品创建一个工厂,如果我们的产品足够多,我们就得创建足够的工厂,这样肯定不是我们想要的。

我们需要一个更加抽象的工厂,来实现有共同属性的产品的生产。

比如,现在我们现在对A产品要生产两个型号:A-1、A-2,B产品也需要生产两个型号:B-1、B-2。如果按照上面的工厂方法,我们需要写四个

posted @ 2016-12-06 16:46  影卓后台开发人员  阅读(160)  评论(0编辑  收藏  举报