版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_40646143/article/details/85055672
建造者模式的本质
- 分离了对象子组件的单独构造(由Builder来负责)和装配(由Director负责)。从而可以构造出复杂的对象。这个模式适用于 : 某个对象的构建过程复杂的情况下使用 。
- 由于实现了构建和装配的解耦 。不同的构建器 , 相同的装配 , 也可以做出不同的对象 。相同的构造器 , 不同的装配顺序也可以做出不同的对象 。 也就是实现了构建算法 , 装配算法的解耦 , 实现了更好的复用 。
1), 创建了创建宇宙飞船类 --其中在创建类 发动机类/逃逸仓类/头等舱类
/** 宇宙飞船对象
* @author 晓电脑
*/
public class Spacecraft {
public Spacecraft(EngineModule engine, EscapeBinModule escapeBin, FirstClassCabiModule firstClassCabi) {
Engine = engine;
EscapeBin = escapeBin;
FirstClassCabi = firstClassCabi;
}
public Spacecraft() {
}
//飞船发动机
private EngineModule Engine;
//飞船逃逸仓
private EscapeBinModule EscapeBin;
//飞船头等舱
private FirstClassCabiModule FirstClassCabi;
public EngineModule getEngine() {
return Engine;
}
public void setEngine(EngineModule engine) {
Engine = engine;
}
public EscapeBinModule getEscapeBin() {
return EscapeBin;
}
public void setEscapeBin(EscapeBinModule escapeBin) {
EscapeBin = escapeBin;
}
public FirstClassCabiModule getFirstClassCabi() {
return FirstClassCabi;
}
public void setFirstClassCabi(FirstClassCabiModule firstClassCabi) {
FirstClassCabi = firstClassCabi;
}
}
/**
* 飞船发动机类
*/
class EngineModule{
private String Engine;
public EngineModule(String engine) {
Engine = engine;
}
public String getEngine() {
return Engine;
}
public void setEngine(String engine) {
Engine = engine;
}
}
/**
* 飞船逃逸仓类
*/
class EscapeBinModule{
private String EscapeBin;
public EscapeBinModule(String escapeBin) {
EscapeBin = escapeBin;
}
public String getEscapeBin() {
return EscapeBin;
}
public void setEscapeBin(String escapeBin) {
EscapeBin = escapeBin;
}
}
/**
* 头等舱类
*/
class FirstClassCabiModule{
private String FirstClassCabi;
public FirstClassCabiModule(String firstClassCabi) {
FirstClassCabi = firstClassCabi;
}
public String getFirstClassCabi() {
return FirstClassCabi;
}
public void setFirstClassCabi(String firstClassCabi) {
FirstClassCabi = firstClassCabi;
}
}
2),创建宇宙飞船组件
/**
* 用于创建飞船的子组件 如发动机类/头等舱类/逃逸仓类 接口
*/
public interface SpacecraftBuilder {
EngineModule builderEngine();
EscapeBinModule builderEscapeBin();
FirstClassCabiModule builderFirstClassCabi();
}
3), 创建宇宙飞船组件实现类
public class XiaoSpacecraftBuilder implements SpacecraftBuilder {
@Override
public EngineModule builderEngine() {
System.out.println("构建发动机");
return new EngineModule("小发动机构建成功");
}
@Override
public EscapeBinModule builderEscapeBin() {
System.out.println("构建逃逸仓");
return new EscapeBinModule("小逃逸仓构建成功");
}
@Override
public FirstClassCabiModule builderFirstClassCabi() {
System.out.println("构建头等舱");
return new FirstClassCabiModule("小头等舱构建成功");
}
}
4),创建宇宙飞船组装接口类
/**
* 组装宇宙飞船接口
*/
public interface SpacecraftDirector {
Spacecraft createSpacecraft();
}
5),宇宙飞船组装类实现类
public class xiaoSpacecraftDirector implements SpacecraftDirector {
private SpacecraftBuilder spacecraftBuilder;
public xiaoSpacecraftDirector(SpacecraftBuilder spacecraftBuilder) {
this.spacecraftBuilder=spacecraftBuilder;
}
@Override
public Spacecraft createSpacecraft() {
//构建发动机
EngineModule module = spacecraftBuilder.builderEngine();
//构建逃逸仓
EscapeBinModule module1 = spacecraftBuilder.builderEscapeBin();
//构建头等舱
FirstClassCabiModule classCabiModule = spacecraftBuilder.builderFirstClassCabi();
//创建宇宙飞船
Spacecraft spacecraft = new Spacecraft(module,module1,classCabiModule);
return spacecraft;
}
}
6),创建test测试的客户端Cilent如下
/**
* 测试创建宇宙飞船
*/
public class Client {
public static void main (String[] args) {
xiaoSpacecraftDirector director = new xiaoSpacecraftDirector(new XiaoSpacecraftBuilder());
Spacecraft spacecraft = director.createSpacecraft();
System.out.println(spacecraft.getEngine().getEngine());
System.out.println(spacecraft.getEscapeBin().getEscapeBin());
System.out.println(spacecraft.getFirstClassCabi().getFirstClassCabi());
}
}
运行结果:
创建者模式类图如下
建造者模式在开发中应用场景 :
- StringBuilder 类的append 方法
- SQL 中的PreparedStatement
- JDOM 中 , DomBuilder , SAXBuilder