首页 > 代码库 > 设计模式之禅-抽象工程模式
设计模式之禅-抽象工程模式
个人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)产品族内约束为非公开状态
抽象工厂模式的缺点:
产品族扩展非常困难
设计模式之禅-抽象工程模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。