设计模式之抽象工厂方法

xiaoxiao2021-02-28  91

描述:女娲造人的故事想必大家都知道,在之前文章中已经提到过工厂方法模式,女娲造出来三种肤色的人类,分别会说英语,拉丁语以及汉语,但是造出的人类有个缺陷,没有男女性别之分,因此,女娲要想办法使造出来的人类性别是男或者女,因此,女娲想出来一个办法,将造人仓库分为男性仓库和女性仓库,男性仓库负责造男性黑人,男性白人,男性黄人;女性仓库负责造女性黑人,女性白人,女性黄人。

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 { @Override public void color() { System.out.println("我是黑种人!"); } @Override public void talk() { System.out.println("我的语言拉丁文语!"); } } package com.java.abstracfactory; public abstract class AbstractWhiteHuman implements Human { @Override public void color() { System.out.println("我是白种人!"); } @Override public void talk() { System.out.println("我的语言是英语!"); } } package com.java.abstracfactory; public abstract class AbstractYellowHuman implements Human { @Override public void color() { System.out.println("我是黄种人!"); } @Override public void talk() { System.out.println("我的语言是汉语!"); } } package com.java.abstracfactory; public class MaleBlackHuman extends AbstractBlackHuman { @Override public void getSex() { System.out.println("我是男性!"); } } package com.java.abstracfactory; public class MaleWhiteHuman extends AbstractWhiteHuman { @Override public void getSex() { System.out.println("我是男性!"); } } package com.java.abstracfactory; public class MaleYellowHuman extends AbstractYellowHuman { @Override public void getSex() { System.out.println("我是男性!"); } } package com.java.abstracfactory; public class FemaleBlackHuman extends AbstractBlackHuman { @Override public void getSex() { System.out.println("我是女性!"); } } package com.java.abstracfactory; public class FemaleWhiteHuman extends AbstractWhiteHuman { @Override public void getSex() { System.out.println("我是女性!"); } } package com.java.abstracfactory; public class FemaleYellowHuman extends AbstractYellowHuman { @Override public void getSex() { System.out.println("我是女性!"); } }

2、女娲制作的男性和女性仓库类 package com.java.abstracfactory; public class FemaleFactory implements AbstractHumanFactory { @Override public Human createBlack() { return new FemaleBlackHuman(); } @Override public Human createWhite() { return new FemaleWhiteHuman(); } @Override public Human createYellow() { return new FemaleYellowHuman(); } } package com.java.abstracfactory; public class MaleFactory implements AbstractHumanFactory { @Override public Human createBlack() { return new MaleBlackHuman(); } @Override public Human createWhite() { return new MaleWhiteHuman(); } @Override public 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、测试结果

我是黑种人! 我的语言拉丁文语! 我是男性! 我是白种人! 我的语言是英语! 我是男性! 我是黄种人! 我的语言是汉语! 我是男性! 我是黑种人! 我的语言拉丁文语! 我是女性! 我是白种人! 我的语言是英语! 我是女性! 我是黄种人! 我的语言是汉语! 我是女性!

转载请注明原文地址: https://www.6miu.com/read-72737.html

最新回复(0)