个人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)产品族内约束为非公开状态
抽象工厂模式的缺点:
产品族扩展非常困难
时间: 2024-10-08 05:40:47