设计模式之抽象工厂方法

来源:互联网 发布:兰帕德生涯进球数据 编辑:程序博客网 时间: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("我是女性!");}}


2、女娲制作的男性和女性仓库类
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
原创粉丝点击