设计模式-建造者模式

文章目录

1.传统方式完成盖房项目

1.需求说明
2.类图
3.目录结构
4.代码实现
1.AbstractHouse.java
java 复制代码
package com.sun.tradition;

/**
 * Description: 抽象的建造房屋的类
 * @Author sun
 * @Create 2024/5/28 21:12
 * @Version 1.0
 */
public abstract class AbstractHouse {

    // 打地基
    public abstract void buildBasic();
    // 砌墙
    public abstract void buildwalls();
    // 封顶
    public abstract void roofed();

    // 造房子
    public void build() {
        buildBasic();
        buildwalls();
        roofed();
    }
}
2.CommonHouse.java
java 复制代码
package com.sun.tradition;

/**
 * Description: 普通房子
 * @Author sun
 * @Create 2024/5/28 21:16
 * @Version 1.0
 */
public class CommonHouse extends AbstractHouse{
    @Override
    public void buildBasic() {
        System.out.println("普通房子打地基");
    }

    @Override
    public void buildwalls() {
        System.out.println("普通房子砌墙");
    }

    @Override
    public void roofed() {
        System.out.println("普通房子封顶");
    }
}
3.Client.java
java 复制代码
package com.sun.tradition;

/**
 * Description:
 * @Author sun
 * @Create 2024/5/28 21:17
 * @Version 1.0
 */
public class Client {
    public static void main(String[] args) {
        CommonHouse commonHouse = new CommonHouse();
        commonHouse.build();
    }
}
4.结果
5.优缺点分析

2.建造者模式

1.基本介绍
2.建造者模式的四个角色
3.类图
4.代码实现
1.House.java
java 复制代码
package com.sun.impove;

/**
 * Description: 产品
 * @Author sun
 * @Create 2024/5/29 19:47
 * @Version 1.0
 */
public class House {
    private String basic;
    private String wall;
    private String roofed;

    public String getBaise() {
        return basic;
    }

    public void setBaise(String basic) {
        this.basic = basic;
    }

    public String getWall() {
        return wall;
    }

    public void setWall(String wall) {
        this.wall = wall;
    }

    public String getRoofed() {
        return roofed;
    }

    public void setRoofed(String roofed) {
        this.roofed = roofed;
    }
}
2.HouseBuilder.java
java 复制代码
package com.sun.impove;

/**
 * Description: 抽象建造者
 * @Author sun
 * @Create 2024/5/29 19:48
 * @Version 1.0
 */
public abstract class HouseBuilder {
    // 组合一个产品
    protected House house = new House();

    // 对产品进行一定的操作
    // 打地基
    public abstract void buildBasic();
    // 砌墙
    public abstract void buildwalls();
    // 封顶
    public abstract void roofed();

    // 将建造之后的产品返回
    public House buildHouse() {
        return house;
    }
}
3.HighHouse.java
java 复制代码
package com.sun.impove;

/**
 * Description: 高房子
 * @Author sun
 * @Create 2024/5/29 20:01
 * @Version 1.0
 */
public class HighHouse extends HouseBuilder{
    @Override
    public void buildBasic() {
        System.out.println("高房子打地基");
    }

    @Override
    public void buildwalls() {
        System.out.println("高房子砌墙");
    }

    @Override
    public void roofed() {
        System.out.println("高房子封顶");
    }
}
4.CommonHouse.java
java 复制代码
package com.sun.impove;

/**
 * Description: 普通房子
 * @Author sun
 * @Create 2024/5/29 19:58
 * @Version 1.0
 */
public class CommonHouse extends HouseBuilder{
    @Override
    public void buildBasic() {
        System.out.println("普通房子打地基");
    }

    @Override
    public void buildwalls() {
        System.out.println("普通房子砌墙");
    }

    @Override
    public void roofed() {
        System.out.println("普通房子封顶");
    }
}
5.HouseDirector.java
java 复制代码
package com.sun.impove;

/**
 * Description: 指挥者
 * @Author sun
 * @Create 2024/5/29 20:04
 * @Version 1.0
 */
public class HouseDirector {
    // 聚合一个抽象建造者
    private HouseBuilder houseBuilder;

    // 通过构造器聚合
    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    // 或者通过setter方法聚合
    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    // 通过抽象建造者指挥具体的建造流程
    public House constructHouse() {
        houseBuilder.buildwalls();
        houseBuilder.buildBasic();
        houseBuilder.roofed();
        // 建造完成后调用抽象建造者的构建房子方法,返回一个房子
        return houseBuilder.buildHouse();
    }
}
6.Client.java
java 复制代码
package com.sun.impove;

/**
 * Description:
 * @Author sun
 * @Create 2024/5/29 20:11
 * @Version 1.0
 */
public class Client {
    public static void main(String[] args) {
        // 让指挥者盖一个高房子
        HouseDirector houseDirector = new HouseDirector(new HighHouse());
        House house = houseDirector.constructHouse();
    }
}
相关推荐
计算机徐师兄1 分钟前
Java基于微信小程序的食堂线上预约点餐系统【附源码、文档说明】
java·微信小程序·食堂线上预约点餐系统小程序·食堂线上预约点餐微信小程序·java食堂线上预约点餐小程序·食堂线上预约点餐小程序·食堂线上预约点餐系统微信小程序
无心水1 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
Boilermaker19928 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维8 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_999 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子9 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34169 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体110 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
xiaolyuh12310 小时前
Spring 框架 核心架构设计 深度详解
spring·设计模式·spring 设计模式
wszy180910 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos