美文网首页
设计模式之禅-抽象工厂模式

设计模式之禅-抽象工厂模式

作者: 凉快先生 | 来源:发表于2020-12-22 09:58 被阅读0次

1.定义抽象工厂接口,具体工厂实现抽象工厂接口,该类工厂生产同一父类的不同子类实例

2.业务背景

在工厂模式中,女娲造人只造了三类人:黄色人种,白色人种和黑色人种,但是没有分为男女性别,现在要创造三类人的男人和女人。

3.

4.定义人类接口

public interface Human {

// 首先定义什么是人类

//人是愉快的,会笑的; 

public void laugh();

// 人类还会哭,代表痛苦

public void cry();

// 人类会说话

public void talk();

// 定义性别

public void sex();

}

5.创建三个抽象类(黄色人种、白色人种、黑色人种)

public abstract class AbstractYellowHuman implements Human {

public void cry() {System.out.println("黄色人类会哭" );}

public void laugh() {System.out.println("黄色人类会大笑" ); }

public void talk() {System.out.println("黄色人类会说话,一般说的都是双字节" ); }

}

public abstract class AbstractWhiteHuman implements Human {

public void cry() {System.out.println("白色人类会哭" );}

public void laugh() {System.out.println("白色人类会大笑" );}

public void talk() {System.out.println("白色人类会说话,一般都是但是单字节!" ); }

}

public abstract class AbstractBlackHuman implements Human {

public void cry() {System.out.println("黑人会哭" );}

public void laugh() {System.out.println("黑人会笑" );}

public void talk() {System.out.println("黑人可以说话,一般人听不懂" );}

}

6.再定义(黄色人种、白色人种、黑色人种)男女类

public class YellowFemaleHuman extends AbstractYellowHuman { 

publicvoid sex() {System.out.println("该黄种人的性别为女..." );}

}

public class YellowMaleHuman extends AbstractYellowHuman { 

publicvoid sex() {System.out.println("该黄种人的性别为男...." );}

}

public class WhiteFemaleHuman extends AbstractWhiteHuman { 

publicvoid sex() {System.out.println("该白种人的性别为女...." );}

}

public class WhiteMaleHuman extends AbstractWhiteHuman { 

public voidsex() {System.out.println("该白种人的性别为男...." ); }

}

public class BlackFemaleHuman extends AbstractBlackHuman { 

publicvoid sex() {System.out.println("该黑种人的性别为女..." );}

}

public class BlackMaleHuman extends AbstractBlackHuman {

public void sex() {System.out.println("该黑种人的性别为男..." );}

}

7.人类枚举类

public enum HumanEnum {

// 把世界上所有人类型都定义出来

YelloMaleHuman("com.cbf4life.yellowHuman.YellowMaleHuman" ),

YelloFemaleHuman("com.cbf4life.yellowHuman.YellowFemaleHuman" ),

WhiteFemaleHuman("com.cbf4life.whiteHuman.WhiteFemaleHuman" ),

WhiteMaleHuman("com.cbf4life.whiteHuman.WhiteMaleHuman" ),

BlackFemaleHuman("com.cbf4life.blackHuman.BlackFemaleHuman" ),

BlackMaleHuman("com.cbf4life.blackHuman.BlackMaleHuman" );

private String value = "" ;

//定义构造函数,目的是Data(value) 类型的相匹配

private HumanEnum(String value){this.value = value;}

public String getValue(){return this.value ;}

}

抽象工厂模式下的产品等级和产品族都已经完成,也就是人类以及产生出的人类是什么样子的都已经 定义好了,下一步就等着工厂开工创建了

8.创建人类工厂接口

public interface HumanFactory {

// 制造黄色人类

public Human createYellowHuman();

// 制造一个白色人类

public Human createWhiteHuman();

// 制造一个黑色人类

public Human createBlackHuman();

}

9.人类工厂抽象类实现人类工厂接口

public abstract class AbstractHumanFactory implements HumanFactory {

/** 给定一个性别人类,创建一个人类出来 专业术语是产生产品等级*/

protected Human createHuman(HumanEnum humanEnum) {

Human human = null ;

//如果传递进来不是一个Enum中具体的一个Element 的话,则不处理

if (!humanEnum.getValue().equals("")) {

try {

// 直接产生一个实例

human = (Human)Class.forName (humanEnum.getValue()).newInstance();

} catch (Exception e) {

//因为使用了enum,这个种异常情况不会产生了,除非你的enum 有问题;

e.printStackTrace();

}

}

return human;

}

}

10.男性工厂

public class MaleHumanFactory extends AbstractHumanFactory {

// 创建一个男性黑种人

public Human createBlackHuman() {return super.createHuman(HumanEnum.BlackMaleHuman );}

// 创建一个男性白种人

public Human createWhiteHuman() {return super.createHuman(HumanEnum.WhiteMaleHuman );}

// 创建一个男性黄种人

public Human createYellowHuman() {return super.createHuman(HumanEnum.YelloMaleHuman );}

}

11.女性工厂

public class FemaleHumanFactory extends AbstractHumanFactory {

// 创建一个女性黑种人

public Human createBlackHuman() {return super.createHuman(HumanEnum.BlackFemaleHuman );}

// 创建一个女性白种人

public Human createWhiteHuman() {return super.createHuman(HumanEnum.WhiteFemaleHuman );}

// 创建一个女性黄种人

public Human createYellowHuman() {return super.createHuman(HumanEnum.YelloFemaleHuman );}

}

12.女娲开始造人了

public class NvWa {

public static void main(String[] args) {

// 第一条生产线,男性生产线

HumanFactory maleHumanFactory = new MaleHumanFactory();

// 第二条生产线,女性生产线

HumanFactory femaleHumanFactory = new FemaleHumanFactory();

//生产线建立完毕,开始生产人了 :

Human maleYellowHuman = maleHumanFactory.createYellowHuman();

Human femaleYellowHuman = femaleHumanFactory.createYellowHuman();

maleYellowHuman.cry();maleYellowHuman.laugh(); 

femaleYellowHuman.sex(); 

/** .....* 后面你可以续了*/

}

}

相关文章

网友评论

      本文标题:设计模式之禅-抽象工厂模式

      本文链接:https://www.haomeiwen.com/subject/hpmjnktx.html