抽象工厂模式小试

一、介绍

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

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

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

 

二、我的实现

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

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

你可能感兴趣的:(抽象工厂模式)