建造者模式
- 将一个复杂对象的构建与表示分离开来,使用多个简单的对象一步一步构建成一个复杂的对象,它提供了一种创建对象的最佳方式
- 用于构建多样化的对象,替代对象的构建函数,更加自由化
定义对象
/**
* 产品对象
*
* @author Mr.lim
*/
public class ProductInfo {
// 产品名称
private String name;
// 产品期限
private String term;
// 开发团队
private String team;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getTerm() {
return term;
}
public void setTerm(String term) {
this.term = term;
}
public String getTeam() {
return team;
}
public void setTeam(String team) {
this.team = team;
}
@Override
public String toString() {
return "ProductInfo{" +
"name='" + name + '\'' +
", term='" + term + '\'' +
", team='" + team + '\'' +
'}';
}
}
定义功能接口
public interface ProductInfoBuilder {
void builderProductInfoName();
void builderProductInfoTerm();
void builderProductInfoTeam();
ProductInfo startProduct();
}
定义功能接口实现,这里可以根据需求,实现不能的功能
public class ProductInfoBuilderImpl implements ProductInfoBuilder {
private ProductInfo productInfo;
public ProductInfoBuilderImpl () {
System.out.println("Builder");
productInfo = new ProductInfo();
}
@Override
public void builderProductInfoName() {
System.out.println("设定项目名称相关逻辑");
productInfo.setName("项目名称");
}
@Override
public void builderProductInfoTerm() {
System.out.println("设定项目周期相关逻辑");
productInfo.setTerm("项目周期");
}
@Override
public void builderProductInfoTeam() {
System.out.println("设定项目开发团队相关逻辑");
productInfo.setTeam("项目开发团队");
}
@Override
public ProductInfo startProduct() {
return productInfo;
}
}
导演:管理建造出来的实例的依赖关系
/**
*
* @author Mr.lim
*/
public class Director {
public ProductInfo startProductDirector(ProductInfoBuilder productInfoBuilder) {
productInfoBuilder.builderProductInfoName();
productInfoBuilder.builderProductInfoTerm();
productInfoBuilder.builderProductInfoTeam();
return productInfoBuilder.startProduct();
}
public static void main(String[] args) {
Director director = new Director();
ProductInfo productInfo = director.startProductDirector(new ProductInfoBuilderImpl());
System.out.println(productInfo.toString());
}
}
输出的结果:
Builder
设定项目名称相关逻辑
设定项目周期相关逻辑
设定项目开发团队相关逻辑
ProductInfo{name='项目名称', term='项目周期', team='项目开发团队'}
网友评论