Java设计模式学习-建造者模式

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

猜你喜欢

转载自blog.csdn.net/qq_40646143/article/details/85055672