本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 个人简介:微信公众号关注: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