[设计模式]抽象工厂模式

参考:http://blog.csdn.net/jason0539/article/details/44976775

实例:

小王想买Ford品牌汽车,福特旗下品牌有fiesta, focus, mustang,gt,ranger。

三、抽象工厂模式,它的组成(Ford汽车为例):
1、抽象多个产品接口(Enegine、AirConditioning、eg.):把产品分割多个组件,每个组件定义一个产品接口
2、多个产品接口组件的实现类(EnegineA、EnegineB、AirConditioningA...eg.):实现每个组件的具体类
3、工厂接口(Factory Interface ):核心,多个产品组件的方法集合,用接口或抽象类实现。
4、具体产品(Mustang、Focus、 eg.):抽象产品类的具体实现类,工厂类创建的对象就是它的实例。
抽象工厂模式与工厂方法模式最大却别在产品类设计上。抽象工厂模式将Ford 产品接口细分为汽车的内部组件的接口组合,如发动机接口Enegine.java、空调接口AirConditioning.java等,其 接口实现类则是A发动机EnegineA.java,B发动机EnegineB.java,A空调AirConditioningA.java,B空调AirConditioningB.java。 工厂接口内方法由制造汽车productFord()变成零件组装汽车,安装发动机installEnegine(),安装空调installAirConditioning()等。

福特汽车由多种型号的发动机和空调组成,所以创建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();
	}

}
至此小王就可以购买福特任意品牌的汽车了,定义小王类。
XiaoWang.java
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制造完毕... 


以上就是抽象工厂设计模式







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