设计模式-工厂模式

一、工厂模式
工厂模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。
简单工厂模式好处:工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态地实例化相关的类,对于客户端而言,去除了与具体产品的依赖。例如,利用简单工厂模式来实现计算器,运算工厂根据不同的运算要求动态返回具体的运算类。
简单工厂模式缺陷:一旦需要增加新的运算类,就必须修改运算工厂的逻辑,违反了开放-封闭原则。
工厂模式可以解决简单工厂模式的缺陷,通过对每个具体对象都创建一个具体工厂。但是工厂模式实现时,客户端需要决定实例化哪一个工厂来实现,选择判断的问题还是存在,只是工厂方法把简单工厂的内部逻辑移到了客户端代码来进行。缺点是每增加一个产品,就需要增加一个产品工厂的类,增加了额外的开发量。
二、UML类图

每一个具体的产品,都对应一个生成该产品的工厂。


三、具体案例
参考大话设计模式-雷锋工厂,雷锋工厂为创建雷锋对象的接口,具体的雷锋工厂类有大学生雷锋工厂、社区志愿者工厂等,封装了对应雷锋对象的创建。
public class FactoryDesign {
	public static void main(String[] args) {
		//每次不同对象的创建,只需修改这一行
		IFactory factory=new UndergraduateFactory();
		Leifeng leifeng=factory.createLeifeng();
		leifeng.sweep();
		leifeng.wash();
	}
}
//雷锋类
class Leifeng{
	public void sweep(){
		System.out.println("扫地");
	}
	public void wash(){
		System.out.println("洗碗");
	}
}
//大学生雷锋类
class Undergraduate extends Leifeng{	
}
//社区志愿者雷锋类
class Volunteer extends Leifeng{	
}
//工厂类接口
interface IFactory{
	Leifeng createLeifeng();
}
//创建大学生雷锋
class UndergraduateFactory implements IFactory{
	@Override
	public Leifeng createLeifeng() {
		return new Undergraduate();
	}
}
//创建社区志愿者雷锋
class VolunteerFactory implements IFactory{
	@Override
	public Leifeng createLeifeng() {
		return new Volunteer();
	}
}
实现结果:

扫地
洗碗

参考:大话设计模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值