首页 > 其他分享 >建造者模式

建造者模式

时间:2024-04-06 13:12:23浏览次数:31  
标签:String void 建造 模式 houseBuilder roofed println public

 

1. 盖房子需求

  (1)建造房子需要打桩,砌墙,封顶;

  (2)房子有各种各样,如普通房子,高楼。

 

2. 实现方式

  (1)传统方式

/**
 * @Description :传统方式
 * @date :2024/4/6 12:11
 */
public abstract class AbstractHouse {

    //打地基
    public abstract void buildBasic();

    //砌墙
    public abstract void buildWalls();

    //封顶
    public abstract void roofed();

    public void build(){
        buildBasic();
        buildWalls();
        roofed();
    }
}
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("普通房子封顶");
    }
}
public class Client {

    public static void main(String[] args) {

        CommonHouse house = new CommonHouse();
        house.build();
    }
}

  优点:比较好理解,简单;

     缺点:把产品(房子)和创建产品的过程(建房子的流程)封装在一起,耦合性增强

 

  (2)建造者模式

  把复杂对象的建造过程抽象出来,是这个抽象过程的不同实现方法构造出不同的对象

/**
 * @Description :产品
 * @date :2024/4/6 12:17
 */
public class House {

    private String basic;

    private String wall;

    private String roofed;

    public String getBasic() {
        return basic;
    }

    public void setBasic(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;
    }
}
/**
 * @Description :产品创建过程
 * @date :2024/4/6 12:22
 */
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;
    }

}
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("普通房子封顶");
    }
}
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("高楼屋顶");
    }
}
/**
 * @Description :指挥者决定建造哪种类型的房子
 * @date :2024/4/6 12:25
 */
public class HouseDirector {

    private HouseBuilder houseBuilder;

    public HouseDirector(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public void setHouseBuilder(HouseBuilder houseBuilder) {
        this.houseBuilder = houseBuilder;
    }

    public House constructHouse(){
        houseBuilder.buildBasic();
        houseBuilder.buildWalls();
        houseBuilder.roofed();
        return houseBuilder.buildHouse();
    }
}
public class Client {

    public static void main(String[] args) {
        HouseDirector houseDirector = new HouseDirector(new CommonHouse());
        houseDirector.constructHouse();

        System.out.println("-----------------");

        HighHouse highHouse = new HighHouse();
        houseDirector.setHouseBuilder(highHouse);
        houseDirector.constructHouse();
    }
}

  优点:增加新的具体建造者无需修改原有类的代码,指挥者对抽象建造者编程,符合开闭原则;客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦;

标签:String,void,建造,模式,houseBuilder,roofed,println,public
From: https://www.cnblogs.com/homle/p/18117343

相关文章

  • 将 shell 的行编辑模式设置为Vi 文本编辑器的模式
    set-ovi在Bashshell中,使用set-ovi语句可以将shell的行编辑模式设置为类似于Vi文本编辑器的模式。这意味着当你在命令行中输入命令时,你可以使用Vi或Vim编辑器的按键和命令来编辑和操纵命令行。当设置为Vi模式时,你可以使用以下常用的Vi编辑命令:Esc:进入命......
  • 搭建hadoop 基于yarn的集群模式
     准备工作:三个虚拟机相同操作1.创建三个虚拟机,参考之前的配置信息2.设置主机名vi/etc/hosts 加入192.168.61.112bigdata112192.168.61.113bigdata113192.168.61.114bigdata1143.关闭防火墙:systemctlstopfirewalld.service/systemctldisablefirewalld.servi......
  • ARM上面Docker模式安装chrome以及chromedriver的过程
    ARM上面Docker模式安装chrome以及chromedriver的过程背景公司里面有四台鲲鹏服务器想通过ARM的自动化进行功能遍历走查.前期提过需求,但是同时调研之后发现比较困难,作罢了.最近清明假期.想着能够实现以下.最开始的思路虽然网上有一个chromedriver的下载地址:http......
  • 折腾PXE网络启动 pxe 引导uefi模式 GRUB Shell (TFTPD64 OPENWRT)
    简介:上一篇折腾了maxdos,但是uefi是不支持dos的,openwrt的闪存又决定了只能启动命令行界面的系统,只有UEFIShell适合了。一:所需软件提取BOOTX64.EFIgrub4dos(chenall.net)这次下载grub4dos-for_UEFI下载以后,解压,只需要根目录BOOTX64.EFI文件。配置TFTP文件#创建一个文件夹......
  • B/S架构SaaS模式 医院云HIS系统源码,自主研发,支持电子病历4级
    B/S架构SaaS模式医院云HIS系统源码,自主研发,支持电子病历4级系统概述:一款满足基层医院各类业务需要的云HIS系统。该系统能帮助基层医院完成日常各类业务,提供病患挂号支持、病患问诊、电子病历、开药发药、会员管理、统计查询、医生站和护士站等一系列常规功能,还能与公卫、PAC......
  • 【Java】jdk1.8 Java代理模式,Jdk动态代理讲解(非常详细,附带class文件)
      ......
  • rust 面向对象编程特性、模式与模式匹配、高级特征
    面向对象编程OOP学习了结构体、枚举,它们可以包含自定义数据字段,也可以定义内部方法,它们提供了与对象相同的功能。面向对象的四大特征:封装、继承、多态通过pub标记为公有的结构体,在其他模块中可以访问使用这个结构体。但是对于结构体内部字段,如果不用pub,则仍是私有的,则可以通过......
  • 在CentOS 7中配置登录为字符登录模式
    在CentOS7中配置登录为字符登录模式,可以通过修改系统服务的默认目标来实现。字符登录模式通常对应于多用户模式(multi-usermode),在这种模式下,系统不提供图形界面,而是直接进入命令行界面。以下是配置CentOS7为字符登录模式的步骤:查看当前默认目标:首先,你需要查看当前的默认登录界......
  • vue consle.log 只在开发模式下有效 GPT-4 Turbo
    vue2生产环境执行console.log不会影响运行效率,不过为了优化生产环境的代码,通常建议移除或替换掉开发阶段的console.log语句。从GPT-4Turbo获得资料并进行测试修改后,可以通过以下方法实现,已经在实际项目中成功运行:1、注册全局方法$log_dev_env 在项目src/main.js文件中使用......
  • 设计模式总结-桥接模式
    桥接模式模式动机模式定义模式结构模式分析桥接模式实例与解析实例一:模拟毛笔模式优缺点模式动机设想如果要绘制矩形、圆形、椭圆、正方形,我们至少需要4个形状类,但是如果绘制的图形需要具有不同的颜色,如红色、绿色、蓝色等,此时至少有如下两种设计方案:第一种设计方......