设计模式-工厂模式

模式定义:提供创建对象的接口。包括工厂方法和抽象工厂方法两种。

 

为什么使用工厂模式呢?

工厂模式相当于new一个对象,但是它可以为你的系统带来更大的扩展性和更小的修改量。

情景一:

有一个汽车类Car

public  class Car{

    public Car() {

        设置汽车形状

        设置汽车颜色

        ......

    }

}

Car对象的初始化有很多工作要做,这样不利于以后代码的修改,可以利用工厂模式来使大量的初始化工作从构造器中分离出来。

情景二:

有一个工厂类,生产飞机、火车、汽车...每个对象都要实例化一次,而且汽车的种类是在不断更新增长的,如果用工厂模式,这些因素引发的程序改动就会很小。

 

工厂方法:

继续上面的例子,将交通工具抽象成Machine接口,不同种类的交通工具实现Machine接口。

建立一个工厂

public class Factory {

    public static final int TYPE_PLANE = 0;

    public static final int TYPE_TRAIN = 1;

    public static final int TYPE_CAR = 2;

 

    public static Machine createMachine(int which) {

        if (TYPE_PLANE == which) {

            return new Plane();

        } else if (TYPE_TRAIN == which) {

            return new Train();

        } else if (...) { ... }

        return null;

    }

}

现在需要实例化一辆汽车的话,就是用 CarFactory.createMachine(Factory.TYPE_CAR);

进一步,稍微复杂一点的话,就是工厂类也有它的实现类。

 

抽象工厂:

上面的工厂中可以制造各种交通工具,假设现在出现了很多家公司找这家工厂代工,就需要为不同的品牌贴牌。

品牌:大众、奥迪、宝马、奔驰...

现在,我们需要抽象出一个Factory:

public abstract class Factory{

    public abstract Plane createPlane();

    public abstract Train createTrain();

    public abstract Car createCar() ;

}

大众贴牌工厂

public class VolkswagenFactory extends Factory{

    public abstract Plane createPlane() {

        setTag();

    }

    public abstract Train createTrain() {

        setTag();

    }

    public abstract Car createCar() {

        setTag();

    }

    

    private void setTag() {

        System.out.println("为大众贴牌");

    }

}

其他品牌的工厂类似。

 

 
posted @ 2012-12-18 13:46  默默生长的蘑菇  阅读(190)  评论(0编辑  收藏  举报