设计模式之工厂模式(factory)

一、引言:
新人学java的时候,工厂模式和代理模式是必须掌握的两种设计模式,工厂模式的方针图如下:
在这里插入图片描述
假设我们的产品是一个抽象接口,而我们的具体产品继承自该接口,为了实现工厂模式,我们同样声明了一个工厂接口Creator,里面就是我们需要实现的工厂方法,当我们需要产出一个具体的产品时,自然我们需要实例化一个具体的工厂类,该类就继承自抽象工厂接口,这样,上层产品不需要去关注类的具体实现,只需要关注工厂抽象类本身就可以了。

二、工厂实例:

interface Human {
     /* 获取人种肤色 */
     public void getColor();
     /* 测试接口 */
     public void talk();
}

class BlackHuman implements Human {
	public void getColor(){
		System.out.println("黑色人种的皮肤颜色是黑色的!");
	}
	public void talk() {
		System.out.println("黑人会说话,一般人听不懂。");
	}
}

class YellowHuman implements Human {
	public void getColor(){
		System.out.println("黄色人种的皮肤颜色是黄色的!");
	}
	public void talk() {
		System.out.println("黄色人种会说话,一般说的都是双字节。");
	}
}

class WhiteHuman implements Human {
	public void getColor(){
		System.out.println("白色人种的皮肤颜色是白色的!");
	}
	public void talk() {
		System.out.println("白色人种会说话,一般都是但是单字节。");
	}
}

/* 将工厂类的createHuman设置为静态方法,省去工厂类的实例化 */
class HumanFactory {
	public static <T extends Human> T createHuman(Class<T> c){

		T human = null;
		try {
			/* 产生一个人类 */
			human = c.newInstance();
		} catch (Exception e) {
			System.out.println("人种生成错误!");
		}
		return human;
	}
}

public class static_factory {
	public static void main(String[] args) {            
		/* 造一个白种人 */
		System.out.println("--造出的第一个人是白色人种--");
		Human whiteHuman = HumanFactory.createHuman(WhiteHuman.class);
		whiteHuman.getColor();
		whiteHuman.talk();         
		/* 造一个黑种人 */
		System.out.println("\n--造出的第二个人是黑色人种--");
		Human blackHuman = HumanFactory.createHuman(BlackHuman.class);
		blackHuman.getColor();
		blackHuman.talk();         
		/* 造一个黄种人 */
		System.out.println("\n--造出的第三个人是黄色人种--");
		Human yellowHuman = HumanFactory.createHuman(YellowHuman.class);
		yellowHuman.getColor();
		yellowHuman.talk();
	}
}

该例的UML图如下:
在这里插入图片描述
我们的Human对应的就是方针图中的Product,BlackHuman、YellowHuman和WhiteHuman是三种不同的具体产品,AbstractHumanFactory是方针图中的Creator,也就是我们的抽象工厂,HumanFactory就是我们的具体工厂,其目的就是去产生各种肤色的人(产品)。
上面的demo中,我们实现的是一个具体工厂可以制造各种肤色的人,更规范的设计是每种肤色对应一个具体的工厂,不过这样做的话会增加代码的可维护性,但大型项目中提倡这种做法。

博客参考书籍:秦小波 《设计模式之禅(第2版)》

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下 4载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合;、下载 4使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值