1、定义
建造者模式,将一个复杂对象的构建与它表示分离,使得同样的构建过程可以创建不同的表示。
2、建造者UML
建造者模式UML建模,来源与网络截取3、怎么来理解构造者呢?
我们来举个例子,就以我的台式机组装电脑来说,案例就叫做Lawrence的电脑。首先电脑(Product)都是由显示器,主机,键盘,鼠标
构成(Product属性),而这些部件又是必不可少的,所以可以抽取形成Builder;而我的显示器和主机都是DELL品牌的,键盘是樱桃的,鼠标是罗技的,这些其实就是Builer的一个具体实现即ConcreteBuilder;而这些部件到我的手里要形成一个可以运行的电脑,就需要将他们组装起来,这个过程就是Director;最后组装完毕的电脑也就是Product,下面按这个流程我们来实现下我们的代码。
// Product
public class Computer {
public String mScreen = ""; // 显示器
public String mMainframe = ""; // 主机
public String mKeyboard = ""; // 键盘
public String mMouse = ""; // 鼠标
@Override
public String toString() {
return "Computer{" +
"显示器:'" + mScreen + '\'' +
", 主机:'" + mMainframe + '\'' +
", 键盘:'" + mKeyboard + '\'' +
", 鼠标:'" + mMouse + '\'' +
'}';
}
}
//Builder
public abstract class ComputerBuilder {
// 显示器
abstract void buildScreen();
// 主机
abstract void buildMainframe();
// 键盘
abstract void buildKeyboard();
// 鼠标
abstract void buildMouse();
}
// ConcreteBuilder
public class LawrenceComputerBuilder extends ComputerBuilder {
private Computer mComputer = null;
public LawrenceComputerBuilder() {
mComputer = new Computer();
}
@Override
void buildScreen() { mComputer.mScreen = "DELL显示器"; }
@Override
void buildMainframe() { mComputer.mMainframe = "DELL主机"; }
@Override
void buildKeyboard() { mComputer.mKeyboard = "樱桃机械键盘"; }
@Override
void buildMouse() { mComputer.mMouse = "罗技游戏鼠标"; }
public Computer getProduct() { return mComputer; }
}
// Director
public class ComputerDirector {
public void construct(ComputerBuilder builder) {
builder.buildScreen();
builder.buildMainframe();
builder.buildKeyboard();
builder.buildMouse();
}
}
测试代码:
public static void builderTest() {
// 创建构造器
ComputerDirector computerDirector = new ComputerDirector();
// 创建 Lawrence 电脑的构造方案
LawrenceComputerBuilder lawrenceComputerBuilder = new LawrenceComputerBuilder();
// 组装 电脑
computerDirector.construct(lawrenceComputerBuilder);
// 查看 成品电脑信息
Computer lawrenceComputer = lawrenceComputerBuilder.getProduct();
System.out.println(lawrenceComputer.toString());
}
运行结果:
01-17 15:34:57.740 24051-24051/com.ktln.must I/System.out: Computer{显示器:'DELL显示器', 主机:'DELL主机', 键盘:'樱桃机械键盘', 鼠标:'罗技游戏鼠标'}
4、构造者模式的优点
- 构建流程统一化,不容易出现构建流程缺失
- 将复杂的对象创建拆分,过程更加清晰
这就是我对建造者模式的理解,同时附上一份chenssy的# 设计模式读书笔记-----建造者模式
,个人觉得chenssy分析的更加细致透彻,此文更多是作为自己的一份学习记录
网友评论