抽象工厂(一)

转载 2013年12月06日 08:44:38
public interface Human {
	void laugh();
	void cry();
	void talk();
	void sex();
}


public abstract class AbstractYellowMan implements Human {
    public static String TAG = AbstractYellowMan.class.getSimpleName();
	@Override
	public void laugh() { 
		System.out.println(TAG +" laugh");
	}

	@Override
	public void cry() { 
		System.out.println(TAG +" cry");
	}

	@Override
	public void talk() { 
		System.out.println(TAG +" talk");
	} 
}


public abstract class AbstractWhiteMan implements Human {
    public static String TAG = AbstractWhiteMan.class.getSimpleName();
	@Override
	public void laugh() { 
		System.out.println(TAG +" laugh");
	}

	@Override
	public void cry() { 
		System.out.println(TAG +" cry");
	}

	@Override
	public void talk() { 
		System.out.println(TAG +" talk");
	} 
}

public abstract class AbstractBlackMan implements Human {
    public static String TAG = AbstractBlackMan.class.getSimpleName();
	@Override
	public void laugh() { 
		System.out.println(TAG +" laugh");
	}

	@Override
	public void cry() { 
		System.out.println(TAG +" cry");
	}

	@Override
	public void talk() { 
		System.out.println(TAG +" talk");
	} 
}


public class ImplMaleYellowMman extends AbstractYellowMan { 
	@Override
	public void sex() {
		 System.out.println("该黄种人性别是  **男**");

	} 
}

public class ImplMaleWhiteMman extends AbstractYellowMan { 
	@Override
	public void sex() {
		 System.out.println("该白种人性别是  **男**"); 
	} 
}

public class ImplMaleBlackMman extends AbstractYellowMan { 
	@Override
	public void sex() {
		 System.out.println("该黑种人性别是  **男**"); 
	} 
}

public class ImplFemaleYellowMman extends AbstractYellowMan { 
	@Override
	public void sex() {
		 System.out.println("该黄种人性别是  **女**"); 
	} 
}

public class ImplFemaleWhiteMman extends AbstractYellowMan { 
	@Override
	public void sex() {
		 System.out.println("该白种人性别是  **女**"); 
	} 
}

public class ImplFemaleBlackMman extends AbstractYellowMan { 
	@Override
	public void sex() {
		 System.out.println("该黑种人性别是  **女**"); 
	} 
}

public enum HumanEnum { 
     YellowMaleMan("设计模式之禅.ImplMaleYellowMman"),
     YellowFemaleMan("设计模式之禅.ImplFemaleYellowMman"),
     BlackMaleMan("设计模式之禅.ImplMaleBlackMman"),
     BlackFemaleMan("设计模式之禅.ImplFemaleBlackMman"),
     WhiteMaleMan("设计模式之禅.ImplMaleWhiteMman"),
     WhiteFemalMan("设计模式之禅.ImplFemaleWhiteMman"); 
     private String value = "";
	 private HumanEnum(String value){
		 this.value = value;
	 }
	 public String getValue(){
		 return this.value;
	 }
}

public interface HumanFactory {
     public Human createYellowMan();
     public Human createWhiteMan();
     public Human createBlackMan();
}

public abstract class AbstractHumanFactory implements HumanFactory { 
      protected Human createHuman(HumanEnum humanEnum){
    	  Human human = null;
    	  if(!humanEnum.getValue().equals("")){
    		 try {
				human = (Human) Class.forName(humanEnum.getValue()).newInstance();
			} catch (Exception e) { 
				e.printStackTrace();
			}
    	  }
		return human;
      } 
}

public class MaleHumanFactory extends AbstractHumanFactory { 
	@Override
	public Human createYellowMan() { 
		return super.createHuman(HumanEnum.YellowMaleMan);
	} 
	@Override
	public Human createWhiteMan() {
		 return super.createHuman(HumanEnum.WhiteMaleMan);
	} 
	@Override
	public Human createBlackMan() { 
		return super.createHuman(HumanEnum.BlackMaleMan);
	} 
}

public class FemaleHumanFactory extends AbstractHumanFactory { 
	@Override
	public Human createYellowMan() { 
		return super.createHuman(HumanEnum.YellowFemaleMan);
	} 
	@Override
	public Human createWhiteMan() { 
		return super.createHuman(HumanEnum.WhiteFemalMan);
	} 
	@Override
	public Human createBlackMan() { 
		return super.createHuman(HumanEnum.BlackFemaleMan);
	} 
}

public class Client { 
	public static void main(String[] args) {
		 HumanFactory malefactory = new MaleHumanFactory();
		 HumanFactory femalFactory = new FemaleHumanFactory();
		 Human human = malefactory.createBlackMan();
		 human.cry();
		 human.sex();
		 human.talk();
		 human.laugh(); 
	} 
}


















相关文章推荐

抽象工厂的演示案例

  • 2013年07月31日 09:35
  • 171KB
  • 下载

三层架构抽象工厂示例(源代码)

  • 2013年08月25日 21:06
  • 4.98MB
  • 下载

设计模式学习笔记:Abstract Factory(抽象工厂)

Abstract Factory概要         Abstract Factory模式是一种对象创建模式,意图是提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们(一系列对象)具体的类...

抽象工厂(abstract factory)

  • 2012年06月05日 12:00
  • 4KB
  • 下载

设计模式——(Abstract Factory)抽象工厂

设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。你必须设计相关类,并设计类的接口和继承之间的关系。设计必须可以解决当前问题,同时必须对将来可能发生的问题和需求也有足够的针对性。掌握面向...

用反射机制改进的抽象工厂

  • 2016年12月23日 17:01
  • 14KB
  • 下载

简单三层+抽象工厂

  • 2011年12月20日 23:59
  • 1.37MB
  • 下载

设计模式——抽象工厂(Abstract Factory Pattern)

抽象工厂的运用场景: 当客户对象要从一个相关的产品组中创建一个对象,而没有必要知道到底创建哪个对象时,可以应用抽象工厂模式 抽象工厂的优缺点: 优点: 1、可以产生一系列的产品实例 2、...

C# 语言实现 抽象工厂 功能

  • 2008年08月31日 20:20
  • 23KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:抽象工厂(一)
举报原因:
原因补充:

(最多只允许输入30个字)