抽象工厂模式小试

一、介绍

什么是抽象工厂模式呢?《研磨设计模式》中是这样定义的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

本质是——切换产品簇的实现。

这里的描述挺含糊的,产品簇是什么呢,就是一系列有关联的对象。其实呢,说白了,就是这个工厂接口是用来创建一系列对象的,其实现类保证了其创建的一系列对象直接都是有联系的。

 

二、我的实现

1、我们假设现在要分配校服给学生,衣服、裤子、鞋子都分别有小、中、大码。代码如下:

package abstractFactory;
//衣服接口
public interface Clothes {

}
package abstractFactory;
//鞋子接口
public interface Shoes {

}
package abstractFactory;
//裤子接口
public interface Trousers {

}

其中,衣服、裤子、鞋子分别有3个实现类,即BigClothes、MiddleClothes、SmallClothes,BigShoes、MiddleShoes、SmallShoes和BigTrousers、MiddleTrousers、SmallTrousers。这里就不用列出了。

2、最初,为了方便分配,我们决定小码配小码、中码配中码、大码配大码。

为此我们先建立一个简单的工厂接口,如下:

package abstractFactory;

//抽象工厂方法接口
public interface Factory {

    //衣服
    Clothes getCloth();
    //裤子
    Trousers getTrouser();
    //鞋子
    Shoes getShoe();
}

3、于是,我们就可以通过子类来构造产品簇了。为了实现小码配小码、中码配中码、大码配大码,我们初步构建3个工厂,如下BigSizeFactory:

package abstractFactory;

public class BigSizeFactory implements Factory {

    //返回大码衣服
    public Clothes getCloth() {
        // TODO Auto-generated method stub
        return new BigClothes();
    }
    //返回大码鞋子
    public Shoes getShoe() {
        // TODO Auto-generated method stub
        return new BigShoes();
    }
    //返回大码裤子
    public Trousers getTrouser() {
        // TODO Auto-generated method stub
        return new BigTrousers();
    }

}

SmallSizeFactory、MiddleSizeFactory亦如是,这里不列出。

4、我们分配的过程中,发现有很多孩子都是穿中码衣服、小码裤子和大码鞋子的,为了分配方便,于是我们构建了这样一个工厂,如下:

package abstractFactory;

//这里产品MSM代表MiddleSmallBig,为了称呼方便
public class MSBFactory implements Factory{

    //返回中码衣服
    public Clothes getCloth() {
        // TODO Auto-generated method stub
        return new MiddleClothes();
    }
    //返回小码裤子
    public Trousers getTrouser() {
        // TODO Auto-generated method stub
        return new SmallTrousers();
    }
    //返回大码鞋子
    public Shoes getShoe() {
        // TODO Auto-generated method stub
        return new BigShoes();
    }
}

5、可知,只要知道套餐,就无需关心具体的产品细节。当然了,这里,我们的产品工厂构造的产品之间联系并不十分紧密,这里只是为了简单演示。

另外,我们可以发现,使用抽象工厂模式来创建一系列相关联的对象非常有用,而且可以很方便的切换产品簇。

posted @ 2014-03-25 22:59  Chandler Qian  阅读(509)  评论(0编辑  收藏  举报