java設計模式(創建型)之抽象工廠模式

第0章:簡介

抽象工廠模式定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們的具體類。

抽象工廠模式的實質:選擇產品簇的實現

參考:http://chjavach.iteye.com/blog/792907,研磨設計模式(書籍),大話設計模式(書籍)

模式圖:

待補充

第1章:實踐

(1)1系產品接口(Intf1.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 1系產品接口
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:43
 */
public interface Intf1 {
    public void someMethod();
}

(2)1系A類產品類(Intf1Impl1.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 1系A類產品
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:45
 */
public class Intf1ImplA implements Intf1 {
    @Override
    public void someMethod() {
        System.out.println("1系A類產品");
    }
}

(3)1系B類產品類(Intf1ImplB.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 1系B類產品
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:47
 */
public class Intf1ImplB implements Intf1 {
    @Override
    public void someMethod() {
        System.out.println("1系B類產品");
    }
}

(4)2系產品接口(Intf2.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 2系產品接口
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:44
 */
public interface Intf2 {
    public void someMethod();
}

(5)2系A類產品類(Intf2ImplA.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 2系A類產品
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:48
 */
public class Intf2ImplA implements Intf2 {
    @Override
    public void someMethod() {
        System.out.println("2系A類產品");
    }
}

(6)2系B類產品類(Intf2ImplB.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 2系B類產品
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:49
 */
public class Intf2ImplB implements Intf2 {
    @Override
    public void someMethod() {
        System.out.println("2系B類產品");
    }
}

(7)抽象工廠接口類(AbstractFactory.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 抽象工廠
 * 控制產品生產,即A類工廠不能生產出B類的產品,B類的工廠不能生產出A類的商品
 * 目標產品:1系搭配2系,不跨類搭配,即不能A、B類混搭
 *
 * 抽象工廠模式的定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們的具體類。
 * 抽象工廠模式的本質:選擇產品簇的實現
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  上午11:51
 */
public interface AbstractFactory {

    //1系產品生產
    public Intf1 create1();
    //2系產品生產
    public Intf2 create2();
}

(8)A類產品工廠類(FactoryA.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * A類產品工廠
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  下午12:05
 */
public class FactoryA implements AbstractFactory {

    /**
     * 1系A類產品生產
     * @return
     */
    @Override
    public Intf1 create1() {
        return new Intf1ImplA();
    }

    /**
     * 2系A類產品生產
     * @return
     */
    @Override
    public Intf2 create2() {
        return new Intf2ImplA();
    }
}

(9)B類產品工廠類(FactoryB.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * B類產品工廠
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  下午12:07
 */
public class FactoryB implements AbstractFactory {
    /**
     * 1系B類產品生產
     * @return
     */
    @Override
    public Intf1 create1() {
        return new Intf1ImplB();
    }

    /**
     * 2系B類產品生產
     * @return
     */
    @Override
    public Intf2 create2() {
        return  new Intf2ImplB();
    }
}

(10)客戶端測試類(Client.java)

package com.mcc.core.designPattern.build.abstractFactory;

/**
 * 客戶端測試
 *
 * @author <a href="mailto:[email protected]">menergy</a>
 *         DateTime: 14-3-9  下午12:10
 */
public class Client {

    public static void main(String args[]){
        System.out.println("A類產品生產:");
        //A類產品工廠
        AbstractFactory abstractFactoryA = new FactoryA();
        //A類產品工廠生產1系產品
        Intf1 intf1ImplA = abstractFactoryA.create1();
        intf1ImplA.someMethod();
        //A類產品工廠生產2系產品
        Intf2 intf2ImplA = abstractFactoryA.create2();
        intf2ImplA.someMethod();

        System.out.println("B類產品生產:");
        //B類產品工廠
        AbstractFactory abstractFactoryB = new FactoryB();
        //B類產品工廠生產1系產品
        Intf1 intf1ImplB = abstractFactoryB.create1();
        intf1ImplB.someMethod();
        //B類產品工廠生產2系產品
        Intf2 intf2ImplB = abstractFactoryB.create2();
        intf2ImplB.someMethod();

    }
}





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章