设计模式之《工厂方法模式》

来源:互联网 发布:剑三团队插件数据导入 编辑:程序博客网 时间:2024/06/03 22:52
package com.design01.design;public interface IHuman {//每个人种的皮肤都有相应的颜色void getColor();//人会说话void talk();}

package com.design01.design;public class BlackHumanImpl implements IHuman {@Overridepublic void getColor() {System.out.println("黑种人的皮肤是黑色的...");}@Overridepublic void talk() {System.out.println("黑人说话,一般人听不懂");}}

package com.design01.design;public class YellowHumanImpl implements IHuman{@Overridepublic void getColor() {System.out.println("黄种人 皮肤是黄色的...");}@Overridepublic void talk() {// TODO Auto-generated method stubSystem.out.println("黄种人说普通话");}}

package com.design01.design;public class WhiteHumanImpl implements IHuman {@Overridepublic void getColor() {System.out.println("白种人皮肤很白");}@Overridepublic void talk() {System.out.println("白种人会说英语");}}

package com.design01.design;/** * 抽象人类建造工厂 * @author Administrator * */public abstract class AbstractHumanFactory {public abstract <T extends IHuman> T createHuman(Class<T> s);}

package com.design01.design;/** * 人类创建工厂 * @author Administrator * */public class HumanFactoryImpl extends AbstractHumanFactory{@SuppressWarnings("unchecked")@Overridepublic <T extends IHuman> T createHuman(Class<T> s) {IHuman human = null;try {human = (IHuman) Class.forName(s.getName()).newInstance();} catch (InstantiationException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IllegalAccessException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}return (T) human;}}

package com.design01.design;public class NvwaTest {public static void main(String[] args) {//声明阴阳八卦炉AbstractHumanFactory YinYangLu = new HumanFactoryImpl();System.out.println("造出的第一批是白色人种");//八卦炉造人IHuman whiteHuman = YinYangLu.createHuman(WhiteHumanImpl.class);whiteHuman.getColor();whiteHuman.talk();System.out.println("造出的第二批是黄色人种");IHuman yellowHuman = YinYangLu.createHuman(YellowHumanImpl.class);yellowHuman.getColor();yellowHuman.talk();System.out.println("造出的第三批是黑色人种");IHuman blackHuman = YinYangLu.createHuman(BlackHumanImpl.class);blackHuman.getColor();blackHuman.talk();}}
造出的第一批是白色人种白种人皮肤很白白种人会说英语黄色人种黄种人 皮肤是黄色的...黄种人说普通话黑色人种黑种人的皮肤是黑色的...黑人说话,一般人听不懂


原创粉丝点击