建造者模式
◆建造者模式也属于创建型模式,它提供了一种创建对象的最佳方式。
◆定义: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
◆主要作用:在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。
◆用户只需要给出指定复杂对象的类型和内容,建造者模式负责按顺序创建复杂对象(把内部的建造过程和细
节隐藏起来)
◆例子:
- 工厂(建造者模式) :负责制造汽车(组装过>程和细节在工厂内)
- 汽车购买者(用户) :你只需要说出你需要的>型号(对象的类型和内容),然后直接购买就可以使用了(不需要知道汽车是怎么组装的(车轮、 车门、>发动机、方向盘等等) )
建造者模式的四个角色
- Product(产品角色): 一个具体的产品对象。
- Builder(抽象建造者): 创建一个Product对象的各个部件指定的 接口/抽象类。
- ConcreteBuilder(具体建造者): 实现接口,构建和装配各个部件。
- Director(指挥者): 构建一个使用Builder接口的对象。它主要是用于创建一个复杂的对象。它主要有两个作用,一是:隔离了客户与对象的生产过程,二是:负责控制产品对象的生产过程。指挥者指挥我们的具体的建造者来完成我们的产品
例一:
//指挥:核心,负责指挥建造一个工程,工程如何建造有它决定
public class Director {
//指挥工人按顺序建房子
public Product build(Builder builder){
builder.buildA();
builder.buildB();
builder.buildC();
builder.buildD();
return builder.getProduct();
}
}
//抽象的建造者:方法
public abstract class Builder {
abstract void buildA();//地基
abstract void buildB();//钢筋工程
abstract void buildC();//铺电线
abstract void buildD();//粉刷
//完工:得到产品
abstract Product getProduct();
}
//具体建造者:工人
public class Worker extends Builder{
private Product product;
public Worker(){
product = new Product();
}
@Override
void buildA() {
product.setBuildA("建地基");
System.out.println("建地基");
}
@Override
void buildB() {
product.setBuildB("钢筋工程");
System.out.println("钢筋工程");
}
@Override
void buildC() {
product.setBuildC("铺电线");
System.out.println("铺电线");
}
@Override
void buildD() {
product.setBuildD("粉刷");
System.out.println("粉刷");
}
@Override
Product getProduct() {
return product;
}
}
//产品:房子
public class Product {
private String buildA;
private String buildB;
private String buildC;
private String buildD;
public String getBuildA() {
return buildA; }
public void setBuildA(String buildA) {
this.buildA = buildA; }
public String getBuildB() {
return buildB; }
public void setBuildB(String buildB) {
this.buildB = buildB; }
public String getBuildC() {
return buildC; }
public void setBuildC(String buildC) {
this.buildC = buildC; }
public String getBuildD() {
return buildD; }
public void setBuildD(String buildD) {
this.buildD = buildD; }
}