工厂方法模式

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

工厂方法模式的优点如下:

1、工厂方法模式将创建对象的逻辑与任务交给了工厂类。

2、工厂方法模式支持开闭原则。

3、工厂方法模式实现了创建对象和使用对象的责任分离。

以下的情况,可以考虑使用工厂方法模式:

1、创建某些类的对象的逻辑比较复杂,并且有很多条件分支,而且还可能增加新的条件。

2、一个类不能预先准确地知道它必须创建一个层次类中的哪个子类的对象。

3、一个类使用它的子类决定所要创建的对象。

4、需要封装创建类的对象的逻辑,使得这些逻辑局部化。


例子:保险理赔包含几个基本类型:驾驶员身体受伤、汽车损坏、人员伤亡、多种事故。

UML图:

工厂类接口和实现子类:

//工厂方法接口
public interface InterfaceFactory {
	//生成对应的保险对象
	AutoInsurance getPolicy();
}

//具体工厂,生产驾驶员受伤保险对象
public class DriverInjuredFactory implements InterfaceFactory{
	public AutoInsurance getPolicy(){
		return new DriverInjured();
	}
}

//具体工厂,生产汽车损坏保险对象
public class CarBrokenFactory implements InterfaceFactory{
	public AutoInsurance getPolicy(){
		return new CarBroken();
	}
}

//具体工厂,生产人员受伤保险对象
public class PersonInjuredFactory implements InterfaceFactory{
	public AutoInsurance getPolicy(){
		return new PersonInjured();
	}
}

//具体工厂,生产多种事故保险对象
public class MultiAccidentsFactory implements InterfaceFactory{
	public AutoInsurance getPolicy(){
		return new MultiAccidents();
	}
}

产品类接口及其实现子类:

public interface AutoInsurance {
	String getInsuranceInfo();
}

public class DriverInjured implements AutoInsurance{
	private String description;
	
	public DriverInjured(){
		description = "驾驶员身体受伤保险";
	}
	
	@Override
	public String getInsuranceInfo(){
		return description;
	}
	
}

public class CarBroken implements AutoInsurance{
	private String description;
	
	public CarBroken(){
		description = "汽车损坏保险";
	}
	
	@Override
	public String getInsuranceInfo(){
		return description;
	}
	
}

public class PersonInjured implements AutoInsurance{
	private String description;
	
	public PersonInjured(){
		description = "人员伤亡保险";
	}
	
	@Override
	public String getInsuranceInfo() {
		return description;
	}

}

public class MultiAccidents implements AutoInsurance{
	private String description;
	
	public MultiAccidents(){
		description = "多种事故保险";
	}
	
	@Override
	public String getInsuranceInfo(){
		return description;
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值