设计模式之建造者模式

195 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

  • 个人简介:微信公众号关注:SteveCode。为您分享更多的知识学术。生于忧患死于安乐
  • 专注Java技术干货分享,Java基础技术、数据结构、相关工具、Spring全家桶、intellij idea......

建造者模式

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

源码盘点

项目截图

在这里插入图片描述

/*******************************************************************************
 * Package: com.example.demo.design.builder
 * Type:    BuilderHouse
 * Date:    2022-03-06 21:14
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.builder;

/**
 * 功能描述: 抽象的一个构建者
 *
 * @author Songxianyang
 * @date 2022-03-06 21:14
 */
public interface BuilderHouse {
    House house = new House();
    
    /**
     * 地基
     */
    void foundation();
    
    /**
     * 砌墙
     */
    void buildWall();
    
    /**
     * 封顶
     */
    void capping();
    
    /**
     * 构建对象
     * @return house
     */
    default House builder() {
        return house;
    }
}

/*******************************************************************************
 * Package: com.example.demo.design.builder
 * Type:    Commander
 * Date:    2022-03-06 21:29
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.builder;

/**
 * 功能描述: 指挥者:负责怎么去执行 :行为
 *
 * @author Songxianyang
 * @date 2022-03-06 21:29
 */
public class Commander {
    BuilderHouse builderHouse = null;
    
    public Commander(BuilderHouse builderHouse) {
        this.builderHouse = builderHouse;
    }
    
    public House builder () {
        builderHouse.foundation();
        builderHouse.buildWall();
        builderHouse.capping();
        return builderHouse.builder();
    }
}

/*******************************************************************************
 * Package: com.example.demo.design.builder
 * Type:    HighHouse
 * Date:    2022-03-06 21:28
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.builder;

/**
 * 功能描述: 高楼
 *
 * @author Songxianyang
 * @date 2022-03-06 21:28
 */
public class HighHouse implements BuilderHouse {
    @Override
    public void foundation() {
        
        System.out.println("高楼打地基");
    }
    
    @Override
    public void buildWall() {
        System.out.println("高楼砌墙");
    }
    
    @Override
    public void capping() {
        System.out.println("高楼 吊顶");
    }
}

/*******************************************************************************
 * Package: com.example.demo.design.builder
 * Type:    House
 * Date:    2022-03-06 21:11
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.builder;

import lombok.Data;

/**
 * 功能描述: 房子是一个产品类
 *
 * @author Songxianyang
 * @date 2022-03-06 21:11
 */
@Data
public class House {
    private String spar;
    private Integer height;
}

/*******************************************************************************
 * Package: com.example.demo.design.builder
 * Type:    PlainHouse
 * Date:    2022-03-06 21:20
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.builder;

/**
 * 功能描述:普通房子 实现类
 *
 * @author Songxianyang
 * @date 2022-03-06 21:20
 */
public class PlainHouse implements BuilderHouse {
    @Override
    public void foundation() {
        
        System.out.println("普通房子打地基");
    }
    
    @Override
    public void buildWall() {
        System.out.println("普通房子砌墙");
    }
    
    @Override
    public void capping() {
        System.out.println("普通房子 吊顶");
    }
}

/*******************************************************************************
 * Package: com.example.demo.design.builder
 * Type:    Test
 * Date:    2022-03-06 21:33
 *
 * Copyright (c) 2022 HUANENG GUICHENG TRUST CORP.,LTD All Rights Reserved.
 *
 * You may not use this file except in compliance with the License.
 *******************************************************************************/
package com.example.demo.design.builder;

/**
 * 功能描述:测试类
 *
 * @author Songxianyang
 * @date 2022-03-06 21:33
 */
public class Test {
    public static void main(String[] args) {
        //普通房子
        PlainHouse plainHouse = new PlainHouse();
        Commander commander = new Commander(plainHouse);
        commander.builder();
        System.out.println("-------------------");
        //高楼大厦
    
        HighHouse highHouse = new HighHouse();
        Commander high = new Commander(highHouse);
        high.builder();
    
    }
}

测试截图

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

源码分析

new StringBuilder();
建造者 建造一个产品需要那些步骤:Appendable
具体建造出什么样的抽象对象具有什么功能:AbstractStringBuilder 
指挥者:具体指挥返回什么样的对象StringBuilder、StringBuffer