工厂方法模式

工厂方法模式使用的频率非常高,在我们日常开发中总能见到它的身影。

定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。

其通用类图如下图所示:

实例讲解工厂方法模式

女娲造人类图

女娲造人代码




public class NvWa {
	
	public static void main(String arg) {
		//声明阴阳八卦炉
		AbsHumanFactory humanFactory = new HumanFactory();
		//创造一个黑人
		humanFactory.createHuman(BlackHuman.class);

	}
}

public interface Human {
	
	//皮肤颜色
	public void getColor();

	//语言
	public void talk();

}

public class BlackHuman implement Human {
	
	@Override
	public void getColor() {
		//黑色的皮肤
		System.out.println("黑色的皮肤");
	}

	@Override
	public void talk() {
		System.out.println("黑人语言");
	}
}


public class WhiteHuman extends Human {
	
	@Override
	public void getColor() {
		System.out.println("白色的皮肤");
	}

	@Override
	public void talk() {
		System.out.println("白人的语言");
	}

}

public class YellowHuman extends Human {
	
	@Override
	public void getColor() {
		System.out.println("黄色的皮肤");
	}

	@Override
	public void talk() {
		System.out.println("黄种人的语言");
	}

}

public abstract class AbsHumanFactory {
	
	public <T extends Human> T createHuman(Class<T> c);

}

public class HumanFactory extends AbsHumanFactory {
	
	public <T extends Human> T createHuman(Class<T> c) {
		//定义一个生产的人种
		Human human = null;

		try {
			//产生一个人种
			human = (T)Class.forName(c.getName).newInstance();
		} catch (Exception e) {
			System.out.println("出现错误");
		}

		return human;

	}
}

 

创造超人实例代码

 

public class Client {
	
	public static void main(String[]  arg) {
		//生产一个超人
		ISuperMan superMan = SuperManFactory.createSuperMan("adult");
		//展示下超人的技能
		superMan.specialTalent();

	}
}


public class SuperManFactory {
	
	public static ISuperMan createSuperMan(String type) {

		if ("adult".e(type)) {
			return new AdultSuperMan();
		} else if ("child".e(type)) {
			return new ChildSuperMan();
		} else {
			return null;
		}


	}
}


public interface ISuperMan {
	
	void specialTalent();

}

public class AdultSuperMan implement ISuperMan {
	
	@Override
	public void specialTalent() {
		//成人超人的能力
        System.out.println("力大无穷");
	}
}

public class ChildSuperMan implement ISuperMan {
	
	@Override
	public void specialTalent() {
		//未成年超人的能力
        System.out.println("刀枪不入,移动迅速");
	}

}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值