标签:style blog http ar color os sp on div
个人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)产品族内约束为非公开状态
抽象工厂模式的缺点:
产品族扩展非常困难
标签:style blog http ar color os sp on div
原文地址:http://blog.csdn.net/lovechangshu/article/details/41495499