首页 > 代码库 > 设计模式之禅-抽象工程模式

设计模式之禅-抽象工程模式

个人blog 此篇博文地址为:http://www.sanyinchenblog.com/?p=268

抽象工厂模式:

为创建一组相关或相互依赖的对象提供一个接口,而且无须指定具体的类。

上一章的的故事背景是女娲造人的故事,抽象工厂模式给出了这样一个背景:女娲造人之后发现人造出的人都是一个类型,没有七情六欲。于是女娲想再造一批人,这次打算造的丰富多彩一点,比如分男和女。

先来看一下uml类图:




我们来看一下NvWa类:

public class NvWa {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		MaleFactory factory = new MaleFactory();
		Human human = factory.creatBlackHuman();
		printHuman(human);
		human = factory.creatWhiteHuman();
		printHuman(human);
		human = factory.creatYellowHuman();
		printHuman(human);
		FemaleFactory factory2 = new FemaleFactory();
		human = factory2.creatBlackHuman();
		printHuman(human);
		human = factory2.creatWhiteHuman();
		printHuman(human);
		human = factory2.creatYellowHuman();
		printHuman(human);
	}

	public static void printHuman(Human human) {
		System.out.println("-----------------");
		human.getColor();
		human.getSex();
		human.talk();
	}

}


FemaleFactory类为:

package com.sanyinchen.abstractfactory;

public class FemaleFactory implements HumanFactory {

	@Override
	public Human creatYellowHuman() {
		// TODO Auto-generated method stub
		return new FemaleYellowHuman();
	}

	@Override
	public Human creatBlackHuman() {
		// TODO Auto-generated method stub
		return new FemaleBlackHuman();
	}

	@Override
	public Human creatWhiteHuman() {
		// TODO Auto-generated method stub
		return new FemaleWhiteHuman();
	}

}

运行的结果为:

-----------------
黑人的皮肤是黑色的
男性黑种人
黑种人说话了
-----------------
白人的皮肤是黑色的
男性白种人
白种人说话了
-----------------
黄种人的皮肤是黑色的
男性黄种人
黄种人说话了
-----------------
黑人的皮肤是黑色的
女性黑种人
黑种人说话了
-----------------
白人的皮肤是黑色的
女性白种人
白种人说话了
-----------------
黄种人的皮肤是黑色的
女性黄种人
黄种人说话了
在抽象工厂模式中大家需要注意的是:有N个产品族,在抽象工厂类中就应该有N个创建方法。有M个产品等级就应该有M个实现工厂类,在每个工厂中,实现不同产品族的的生产任务。

抽象工厂模式的优点:

(1)具有良好的封装性

(2)产品族内约束为非公开状态

抽象工厂模式的缺点:

产品族扩展非常困难







设计模式之禅-抽象工程模式