第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(); } } |