工厂方法模式定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法模式使一个类的实例化延迟到其子类。
工厂方法模式的优点如下:
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; } }
工厂方法模式
最新推荐文章于 2025-09-06 13:47:05 发布