参考:http://blog.csdn.net/jason0539/article/details/44976775
实例:
小王想买Ford品牌汽车,福特旗下品牌有fiesta, focus, mustang,gt,ranger。
福特汽车由多种型号的发动机和空调组成,所以创建Enegine、AirConditioning两个接口
Enegine.java
package com.javanet.designpatterns.factory.abstractfactory; /** * 产品类 * ford发动机接口 */ public interface Enegine { }AirConditioning.java
package com.javanet.designpatterns.factory.abstractfactory; /** * 产品 * 空调接口 */ public interface AirConditioning { }创建完发动机和空调的接口,再创建各种型号的发动机和空调实现类
AirConditioningA.java
package com.javanet.designpatterns.factory.abstractfactory; /** * 空调A */ public class AirConditioningA implements AirConditioning { public AirConditioningA() { System.out.println("安装空调A"); } }AirConditioningB.java
package com.javanet.designpatterns.factory.abstractfactory; /** * 空调B */ public class AirConditioningB implements AirConditioning { public AirConditioningB() { System.out.println("安装空调B"); } }EnegineA.java
package com.javanet.designpatterns.factory.abstractfactory; /** * A发动机 */ public class EnegineA implements Enegine { public EnegineA() { System.out.println("安装发动机A"); } }EnegineB.java
package com.javanet.designpatterns.factory.abstractfactory; /** * 发动机B */ public class EnegineB implements Enegine { public EnegineB() { System.out.println("安装发动机B"); } }至此产品类创建完毕,下面创建工厂类
FactoryFord.java
package com.javanet.designpatterns.factory.abstractfactory; /** * 抽象工厂接口 */ public interface FactoryFord { /** * 安装发动机 */ public Enegine installEnegine(); /** * 安装空调 */ public AirConditioning installAirConditoning(); }有了工厂开始制造汽车
FocusImpl.java 制造福克斯
package com.javanet.designpatterns.factory.abstractfactory; /** * 生产Focus */ public class FocusImpl implements FactoryFord { public FocusImpl() { System.out.println("Focus开始制造... "); installEnegine(); installAirConditoning(); System.out.println("Focus制造完毕... "); } @Override public Enegine installEnegine() { return new EnegineB(); } @Override public AirConditioning installAirConditoning() { return new AirConditioningB(); } }MustangImpl.java 制造福特野马
package com.javanet.designpatterns.factory.abstractfactory; /** * 生产Mustang */ public class Mustang implements FactoryFord { public Mustang() { System.out.println("Mustang开始制造... "); installEnegine(); installAirConditoning(); System.out.println("Mustang制造完毕... "); } @Override public Enegine installEnegine() { return new EnegineA(); } @Override public AirConditioning installAirConditoning() { return new AirConditioningA(); } }至此小王就可以购买福特任意品牌的汽车了,定义小王类。
package com.javanet.designpatterns.factory.abstractfactory; /** * 小王买ford汽车 */ public class XiaoWang { public static void main(String[] args) { new Mustang(); new FocusImpl(); } }小明购买了 福特旗下mustang, focus两辆汽车
Mustang开始制造... 安装发动机A 安装空调A Mustang制造完毕... Focus开始制造... 安装发动机B 安装空调B Focus制造完毕...