1.前言:
首先建造者模式适合下面的场景,进行使用:
假设不同的对象有着基本的共同特点、或者配合前端进行页面布局,进行构建一个复杂的对象;
那么可以参考工厂方法模式进行抽取对象,并进行解耦,达到一个设计符合要求的对象的过程;
eg:1
保险产品,前端页面,所有的、或者说某种类型的保险产品,页面逻辑或者说是布局都是基本一致;
i例如,前端页面布局框架拆分固定的几个模块,以及不同的模块有不同的参数结构进行解析后台参数,不同的产品在整体满足要求情况下,不同页面模块上面有着不同的效果,也可以用建造者模式完成构建这个整体对象
eg:2
l例如游戏,简单点,不同的游戏任务,有着基本的公共模块,头部、手臂、腿部、身体等,不同的游戏人物,,满足整体要求的情况下,不同的部分展示不同的效果,这时候也可以使用建造者模式,完成构建这个整体对象的目标,
。。。等等
简单点就是,建造者模式构建对象,适用于,满足一定公共特征、或者特点,只是细微之处不同时,可以使用这个模块进行构建一个复杂的对象。
2.建造者模式模块详解
在建造者模式结构图中包含如下几个角色
● Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方法,一类方法是buildPartX(),它们用于创建复杂对象的各个部件;另一类方法是getResult(),它们用于返回复杂对象。Builder既可以是抽象类,也可以是接口。
●ConcreteBuilder(具体建造者):它实现了Builder接口,实现各个部件的具体构造和装配方法,定义并明确它所创建的复杂对象,也可以提供一个方法返回创建好的复杂产品对象。
●Product(产品角色):它是被构建的复杂对象,包含多个组成部件,具体建造者创建该产品的内部表示并定义它的装配过程。
● Director(指挥者):指挥者又称为导演类,它负责安排复杂对象的建造次序,指挥者与抽象建造者之间存在关联关系,可以在其construct()建造方法中调用建造者对象的部件构造与装配方法,完成复杂对象的建造。客户端一般只需要与指挥者进行交互,在客户端确定具体建造者的类型,并实例化具体建造者对象(也可以通过配置文件和反射机制),然后通过指挥者类的构造函数或者Setter方法将该对象传入指挥者类中。
3.demo设计
/**
* 复杂产品对象类
*/
@Data
class Product {
/**
* 类型
*/
private String type;
/**
* 参考指标
*/
private String index;
//等等
}
/**
* 产品构建抽象类:抽象建造者
*/
abstract class ProductBuilder {
protected Product product = new Product();
public abstract void buildType();
public abstract void buildIndex();
//工厂方法,返回一个完整的游戏角色对象
public product createProduct() {
return product;
}
}
/**
* 产品1生成实现类:具体建造者
*/
class Pro1Builder extends ProductBuilder {
public void buildType() {
product.setType("产品类型1");
}
public void buildIndex() {
product.setIndex("沪深指标1");
}
}
/**
* 指挥者:具体service构建对象调用
*/
class Producter1Control implements XXX某某业务api {
public void business() {
Pro1Builder pro1Builder = new Pro1Builder();
pro1Builder.buildType();
pro1Builder.buildIndex();
//此处已完成初步构建,大致思路如此展示
}
}