我看懂的设计模式 Abstract Factory,抽象工厂
来源:互联网 发布:js提示框自动消失 编辑:程序博客网 时间:2024/05/21 22:28
Abstract Factory,抽象工厂:提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们的具体类。
package com.cbf4life;
public interface Human {
public void laugh();
public void cry();
public void talk();
//定义性别
public void sex();
}
package com.cbf4life.yellowHuman;
import com.cbf4life.Human;
/**
* 为什么要修改成抽象类呢?要定义性别呀
*/
public abstract class AbstractYellowHuman implements Human {
public void cry() {
System.out.println("黄色人种会哭");
}
public void laugh() {
System.out.println("黄色人种会大笑,幸福呀!");
}
public void talk() {
System.out.println("黄色人种会说话,一般说的都是双字节");
}
}
package com.cbf4life.whiteHuman;
import com.cbf4life.Human;
public abstract class AbstractWhiteHuman implements Human {
public void cry() {
System.out.println("白色人种会哭");
}
public void laugh() {
System.out.println("白色人种会大笑,侵略的笑声");
}
public void talk() {
System.out.println("白色人种会说话,一般都是但是单字节!");
}
}
package com.cbf4life.blackHuman;
import com.cbf4life.Human;
public abstract class AbstractBlackHuman implements Human {
public void cry() {
System.out.println("黑人会哭");
}
public void laugh() {
System.out.println("黑人会笑");
}
public void talk() {
System.out.println("黑人可以说话,一般人听不懂");
}
}
package com.cbf4life.yellowHuman;
public class YellowFemaleHuman extends AbstractYellowHuman {
public void sex() {
System.out.println("该黄种人的性别为女...");
}
}
package com.cbf4life.yellowHuman;
public class YellowMaleHuman extends AbstractYellowHuman {
public void sex() {
System.out.println("该黄种人的性别为男....");
}
}
package com.cbf4life.whiteHuman;
public class WhiteFemaleHuman extends AbstractWhiteHuman {
public void sex() {
System.out.println("该白种人的性别为女....");
}
}
package com.cbf4life.whiteHuman;
public class WhiteMaleHuman extends AbstractWhiteHuman {
public void sex() {
System.out.println("该白种人的性别为男....");
}
}
package com.cbf4life.blackHuman;
public class BlackFemaleHuman extends AbstractBlackHuman {
public void sex() {
System.out.println("该黑种人的性别为女...");
}
}
package com.cbf4life.blackHuman;
public class BlackMaleHuman extends AbstractBlackHuman {
public void sex() {
System.out.println("该黑种人的性别为男...");
}
}
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;
}
package com.cbf4life;
public interface HumanFactory {
public Human createYellowHuman();
public Human createWhiteHuman();
public Human createBlackHuman();
}
package com.cbf4life.humanFactory;
import com.cbf4life.Human;
import com.cbf4life.HumanEnum;
import com.cbf4life.HumanFactory;
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;
}
}
package com.cbf4life.humanFactory;
import com.cbf4life.Human;
import com.cbf4life.HumanEnum;
/
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);
}
}
package com.cbf4life.humanFactory;
import com.cbf4life.Human;
import com.cbf4life.HumanEnum;
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);
}
}
package com.cbf4life;
import com.cbf4life.humanFactory.FemaleHumanFactory;
import com.cbf4life.humanFactory.MaleHumanFactory;
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();
/*
* .....
*/
}
}
- 我看懂的设计模式 Abstract Factory,抽象工厂
- 我的设计模式-抽象工厂(Abstract Factory)
- 设计模式-抽象工厂模式(Abstract Factory)
- 设计模式:抽象工厂模式(Abstract Factory)
- 设计模式(2)- 抽象工厂(Abstract Factory)
- Abstract Factory 抽象工厂设计模式
- Abstract Factory 抽象工厂设计模式
- 抽象工厂(Abstract Factory)设计模式
- 设计模式学习-抽象工厂(Abstract Factory)
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式之一:Abstract Factory 抽象工厂
- 【设计模式】之 Abstract Factory 抽象工厂
- 抽象工厂(Abstract Factory)设计模式
- 设计模式之:抽象工厂(Abstract Factory)
- 深入浅出设计模式 ------ Abstract Factory(抽象工厂)
- Abstract Factory 抽象工厂设计模式
- 设计模式-抽象工厂(Abstract Factory)
- 设计模式:抽象工厂-abstract factory
- Android中使用Handler和Thread线程执行后台操作
- 警告handler leaks的解决方法
- 【连载】Unity3D ——强大的跨平台3D游戏开发工具(四)
- 月线收阳收阴概率结果分析
- apktool反编译详细使用教程
- 我看懂的设计模式 Abstract Factory,抽象工厂
- Can't establish HTTP connection when consuming webservice
- 方法的直接调用,反射调用与……Lambda表达式调用
- 【连载】Unity3D ——强大的跨平台3D游戏开发工具(五)
- 显示Bitmap并让适应屏幕改变大小显示
- 两表同步
- 演化理解 Android 异步加载图片
- POJ2488,A Knight's Journey,DFS脑子快抽筋了这几天我会乱说?
- 学习SVN(一)