创建型设计模式是解决对象创建机制的设计模式.
该类设计模式试图根据具体的情况,以适当方式创建对象.
工厂方法的功能:
- 选择一个类
- 创建该类的对象
- 以父类的类型返回该对象
- 不做其他事情
简单工厂方法模式理论与设计例子(汽车保险介绍程序)静态
GUI的全称为Graphical User Interface,图形化界面或图形用户接口,是指采用图形方式显示的计算机操作环境用户接口。
蓝色的实线 代表关联:它使被关联类以类属性的形式出现在使用类中.箭头指向被关联类.
PolicyProducer是一个工厂类,它有一个工厂方法:getAutoObj(String option),它创建并返回一个AutoInsurance类型的对象.
AutoInsurance是一个接口,它声明各种保险政策
四个子类:
- Body:人身保险
- Collision:车撞保险
- Com:综合险
- Person:驾驶员保险
代码:
public class PolicyProducer{
public static AutoInsurance getAutoObj(String obj){
AutoInsurance policy = null;
if(opt.compareTo("BodyInjure") == 0){
policy = new Body();
}else if(opt.compareTo("Collision") == 0){
policy = new Collision();
}else if(opt.compareTo("Com") == 0){
policy = new Com();
}else if(opt.compareTo("PersonInjure") == 0){
policy = new Person();
}
return policy;//创建的是AutoInsurance的子类对象
//返回的是AutoInsurance对象
}
}
//调用
AutoInsurance ai = PolicyProducer.getAutoObj(option);
简单工厂的优点:
- 一些逻辑放入了工厂类中
- 客户类不用自己创建对象
- 责任分离
简单工厂的缺点:
- 接口每增加一个子类,我都要在工厂方法里加一条判断语句
工厂方法模式理论与设计例子(汽车保险介绍程序) 动态
部分代码举例:
//接口与子类
public interface AutoInsurance {
abstract String describe();
}
public class Body implements AutoInsurance {
private String description;
public String describe() {
description = "Body Injur Liability: ";
return description;
}
}
//工厂类与工厂方法
public interface PolicyProducer {
public AutoInsurance getAutoObj();
}
public class BodyFactory implements PolicyProducer {
public AutoInsurance getAutoObj() {
return new Body();
}
}
//调用流程
...
PolicyProducer pp = null;
...
pp = new BodyFactory();
...
AutoInsurance ai = pp.getAutoObj();//前面的一系列操作决定我将得到哪个工厂类对象
String desc = ai.describe();
在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。
显然工厂方法模式支持开闭原则,简单工厂方法模式不支持开闭原则
何时使用工厂方法模式:
- 创建一个对象需要进行大量的条件语句判断
- 创建对象的任务分散在客户类的子类中,比较乱,可以使用工厂方法模式将创建产品类的子类对象的责任分离出来
subclass:子类
claim:声明
insurance:保险
policy:政策