首页 > 其他分享 >20230421 13. 建造者模式 - 画小人

20230421 13. 建造者模式 - 画小人

时间:2023-06-19 09:58:26浏览次数:57  
标签:13 20230421 PersonDirector Builder void 建造 PersonBuilder 小人 public

'建造者模式(Builder)',又叫生成器模式

建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

如果我们用了建造者模式,那么用户就只需指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。

建造者模式

  • Builder是为创建一个Product对象的各个部件指定的抽象接口
  • ConcreteBuilder是具体建造者,实现Builder接口,构造和装配各个部件
  • Product是产品角色
  • Director是指挥者,是构建一个使用Builder接口的对象

建造者模式主要用于创建一些复杂的对象,这些对象内部子对象的建造顺序通常是稳定的,但每个子对象本身的构建通常面临着复杂的变化

建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要再定义一个具体的建造者就可以了

建造者模式是在当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时适用的模式。

代码示例

Builder

public abstract class PersonBuilder {
    protected abstract void head();
    protected abstract void body();
}

Builder实现类

public class FatPersonBuilder extends PersonBuilder{
    @Override
    protected void head() {
        System.out.println("fat head");
    }

    @Override
    protected void body() {
        System.out.println("fat body");
    }
}


public class ThinPersonBuilder extends PersonBuilder{
    @Override
    protected void head() {
        System.out.println("thin head");
    }

    @Override
    protected void body() {
        System.out.println("thin body");
    }
}

Director

public class PersonDirector {
    private PersonBuilder personBuilder;

    public PersonDirector(PersonBuilder personBuilder) {
        this.personBuilder = personBuilder;
    }

    public void createPerson() {
        personBuilder.head();
        personBuilder.body();
    }
}

客户端类

public class Test {
    public static void main(String[] args) {
        PersonBuilder gThin = new ThinPersonBuilder();
        PersonDirector pdThin = new PersonDirector(gThin);
        pdThin.createPerson();

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

        PersonBuilder gFat = new FatPersonBuilder();
        PersonDirector pdFat = new PersonDirector(gFat);
        pdFat.createPerson();
    }
}

标签:13,20230421,PersonDirector,Builder,void,建造,PersonBuilder,小人,public
From: https://www.cnblogs.com/huangwenjie/p/17490360.html

相关文章

  • 【mysql】1378. 使用唯一标识码替换员工ID
    题目:Employees表:±--------------±--------+|ColumnName|Type|±--------------±--------+|id|int||name|varchar|±--------------±--------+id是这张表的主键。这张表的每一行分别代表了某公司其中一位员工的名字和ID。EmployeeUNI表:±--------......
  • [刷题笔记] Luogu P1379 八数码
    ProblemSolution题意非常明确,显然搜索,搜索的时候存储八数码可以用二维或者一维,但是个人感觉用二维更明了一些。需要注意去重,去重可以用set维护一下已经搜过的八数码,如果手写去重小心MLE具体实现的时候注意一下细节。Code#include<iostream>#include<cstdio>#include<al......
  • 尚医通day13【预约挂号】(内附源码)
    页面预览预约挂号根据预约周期,展示可预约日期,根据有号、无号、约满等状态展示不同颜色,以示区分可预约最后一个日期为即将放号日期选择一个日期展示当天可预约列表预约确认第01章-预约挂号接口分析(1)根据预约周期,展示可预约日期数据(2)选择日期展示当天可预约列表1、......
  • ORA-00600 [13013],[5001]
    故障现象:Dumpcontinuedfromfile:/u01/app/oracle/diag/rdbms/test/test1/trace/test1_ora_50647.trcORA-00600:internalerrorcode,arguments:[13013],[5001],[455035],[67227408],[31],[67227408],[17],[],[],[],[],[]报错SQL:-updateTESTa-set(a.A,......
  • 领域驱动设计-软件核心复杂性应对之道 11-13
    11.分析模式的应用马丁分析模式:表示业务建模中的常见构造分析模式的最大作用是借鉴其他项目的经验,把那些项目中所做的广泛的设计方向讨论和实现结果的经验与当前的模型结合起来。记账:钱不会无中生有,也不会无故消失。它只能从一个账户迁移到另一个账户。当你可以幸运地使用一......
  • macOS 13 设置开机启动
    标题虽说是开机启动,但其实是用户登录时加载,本质上是一个意思。1创建用户LaunchAgents目录LaunchAgents目录默认不存,需要手动创建:mkdir~/Library/LaunchAgents2创建.plist文件macOS的登录时加载的文件格式是plist,所以如果你想创建开机启动,则必需创建这个文件。2.1......
  • 13-第四篇-控制单元的功能
    13-第四篇-控制单元的功能一、微操作命令分析微操作:指令解释阶段由控制单元发出的一些指令,这些指令完成的动作跟整条指令完成的功能相比要小的多完成一条指令分4个周期取指周期间址周期指令周期中断周期1.取指周期PC->MAR->地址线1->RM(MAR)->MDRMDR->IROP(IR......
  • HIMA F7131 981713102 电源单元
    HIMAF7131981713102电源单元HIMAF7131981713102电源单元 引言在一个桥接的局域网里,为了增强可靠性,必然要建立一个冗余的路径,网段会用冗余的网桥连接。但是,在一个透明桥桥接的网络里,存在冗余的路径就能建立一个桥回路,桥回路对于一个局域网是致命的。它会带来如下问......
  • 【Azure 环境】使用az login登录遇见OSError: [WinError -2146893813] : '' 错误
    azlogin|Decryptionfailed:[WinError-2146893813]Keynotvaidforuseinspecifiedstate|msal_extensions.persistence:DPAPIerrorlikelycausedbyfilecontentnotpreviouslyencrypted.Appdevelopershouldmigratebycallingsave(......
  • 【雕爷学编程】Arduino动手做(113)---5110液晶屏模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来---小小的进步或是......