设计模式之抽象工厂方法
来源:互联网 发布:兰帕德生涯进球数据 编辑:程序博客网 时间:2024/06/04 18:55
描述:女娲造人的故事想必大家都知道,在之前文章中已经提到过工厂方法模式,女娲造出来三种肤色的人类,分别会说英语,拉丁语以及汉语,但是造出的人类有个缺陷,没有男女性别之分,因此,女娲要想办法使造出来的人类性别是男或者女,因此,女娲想出来一个办法,将造人仓库分为男性仓库和女性仓库,男性仓库负责造男性黑人,男性白人,男性黄人;女性仓库负责造女性黑人,女性白人,女性黄人。
UML类图如下(以两种产品为例):
测试代码:
1、要造人的接口
package com.java.abstracfactory;public interface Human {public void color();public void talk();public void getSex();}
package com.java.abstracfactory;public abstract class AbstractBlackHuman implements Human {@Overridepublic void color() {System.out.println("我是黑种人!");}@Overridepublic void talk() {System.out.println("我的语言拉丁文语!");}}
package com.java.abstracfactory;public abstract class AbstractWhiteHuman implements Human {@Overridepublic void color() {System.out.println("我是白种人!");}@Overridepublic void talk() {System.out.println("我的语言是英语!");}}
package com.java.abstracfactory;public abstract class AbstractYellowHuman implements Human {@Overridepublic void color() {System.out.println("我是黄种人!");}@Overridepublic void talk() {System.out.println("我的语言是汉语!");}}
package com.java.abstracfactory;public class MaleBlackHuman extends AbstractBlackHuman {@Overridepublic void getSex() {System.out.println("我是男性!");}}
package com.java.abstracfactory;public class MaleWhiteHuman extends AbstractWhiteHuman {@Overridepublic void getSex() {System.out.println("我是男性!");}}
package com.java.abstracfactory;public class MaleYellowHuman extends AbstractYellowHuman {@Overridepublic void getSex() {System.out.println("我是男性!");}}
package com.java.abstracfactory;public class FemaleBlackHuman extends AbstractBlackHuman {@Overridepublic void getSex() {System.out.println("我是女性!");}}
package com.java.abstracfactory;public class FemaleWhiteHuman extends AbstractWhiteHuman {@Overridepublic void getSex() {System.out.println("我是女性!");}}
package com.java.abstracfactory;public class FemaleYellowHuman extends AbstractYellowHuman {@Overridepublic void getSex() {System.out.println("我是女性!");}}
package com.java.abstracfactory;public class FemaleFactory implements AbstractHumanFactory {@Overridepublic Human createBlack() {return new FemaleBlackHuman();}@Overridepublic Human createWhite() {return new FemaleWhiteHuman();}@Overridepublic Human createYellow() {return new FemaleYellowHuman();}}
package com.java.abstracfactory;public class MaleFactory implements AbstractHumanFactory {@Overridepublic Human createBlack() {return new MaleBlackHuman();}@Overridepublic Human createWhite() {return new MaleWhiteHuman();}@Overridepublic Human createYellow() {return new MaleYellowHuman();}}
3、测试类
package com.java.abstracfactory;public class AbstractFactoryTest {public static void main(String[] args) {AbstractHumanFactory maleFactory = new MaleFactory();Human human1 = maleFactory.createBlack();human1.color();human1.talk();human1.getSex();Human human2 = maleFactory.createWhite();human2.color();human2.talk();human2.getSex();Human human3 = maleFactory.createYellow();human3.color();human3.talk();human3.getSex();AbstractHumanFactory femaleFactory = new FemaleFactory();Human human4 = femaleFactory.createBlack();human4.color();human4.talk();human4.getSex();Human human5 = femaleFactory.createWhite();human5.color();human5.talk();human5.getSex();Human human6 = femaleFactory.createYellow();human6.color();human6.talk();human6.getSex();}}
4、测试结果
我是黑种人!我的语言拉丁文语!我是男性!我是白种人!我的语言是英语!我是男性!我是黄种人!我的语言是汉语!我是男性!我是黑种人!我的语言拉丁文语!我是女性!我是白种人!我的语言是英语!我是女性!我是黄种人!我的语言是汉语!我是女性!
0 0
- 设计模式之抽象工厂方法模式
- 设计模式之抽象工厂方法模式
- 设计模式之《抽象工厂方法模式》
- 设计模式之工厂方法模式与抽象工厂模式
- 常用设计模式之工厂方法模式、抽象工厂模式
- 设计模式之工厂方法模式|抽象工厂模式
- 设计模式之工厂方法模式与抽象工厂模式
- 设计模式之工厂方法模式和抽象工厂模式
- 设计模式之抽象工厂方法
- 设计模式之抽象工厂方法
- 设计模式之抽象工厂方法
- 设计模式之-简单工厂、工厂方法、抽象工厂
- 工厂设计模式之工厂方法与抽象工厂
- 设计模式之简单工厂/工厂方法/抽象工厂
- 设计模式学习之简单工厂、工厂方法、抽象工厂
- 设计模式之工厂方法、简单工厂、抽象工厂
- 设计模式之简单工厂、工厂方法和抽象工厂
- 设计模式之简单工厂、工厂方法和抽象工厂
- jsp九大内置对象
- Parcelable
- linux下如何用GDB调试c++程序
- 算法学习笔记–递归(2)之栈
- Jackson工具--实现微信支付对象的封装
- 设计模式之抽象工厂方法
- 百度2017秋招-分数序列和
- A + B Problem
- 计算机基本原理总结
- mui开发app之plusready和init区别
- Activity生命周期(一)
- oracle关于 job的创建
- 【HDU5412】CRB and Queries-整体二分:带修改区间第K小
- 图像卷积与滤波器关系