建造者模式

Windows MCP 安装教程:让 AI 代理与 Windows 系统无缝交互 通过以上步骤,你已经成功安装和配置了 Windows MCP 服务。现在你的 Cursor 编辑器可以通过 MCP 协议与 Windows 系统进行深度交互,AI 代理能够:启动和控制应用程序执行系统命令自动化 UI 操作获取系统状态信息这为 AI 辅助开发和工作流程自动化提供了强大的基础。如果你在使用过程中遇到任何问题,欢迎在评论区讨论或查看项目的官方文档。 阅读详情

 

StringBuilder底层用的建造者模式  拼接字符串~~ 数组(可以扩容) 存放单个字符 字符整合在一起时候 形成字符串

什么是建造者模式

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

工厂类模式提供的是创建单个类的模式,而建造者模式则是将各种产品集中起来进行管理,用来创建复合对象,所谓复合对象就是指某个类具有不同的属性,其实建造者模式就是前面抽象工厂模式和最后的Test结合起来得到的。

建造者模式通常包括下面几个角色:

1、Builder:给出一个抽象接口,以规范产品对象的各个组成成分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建。

2、ConcreteBuilder:实现Builder接口,针对不同的商业逻辑,具体化复杂对象的各部分的创建。 在建造过程完成后,提供产品的实例。

3、Director:调用具体建造者来创建复杂对象的各个部分,在指导者中不涉及具体产品的信息,只负责保证对象各部分完整创建或按某种顺序创建。

4、Product:要创建的复杂对象。

建造者应用场景

1、去肯德基,汉堡、可乐、薯条、炸鸡翅等是不变的,而其组合是经常变化的,生成出所谓的"套餐"。

 19元每周三 汉堡+可乐+薯条=套餐可能会发生改变。

2、JAVA 中的 StringBuilder 数组(单个字符)字整合在一起 字符串

使用场景:

1、需要生成的对象具有复杂的内部结构。

2、需要生成的对象内部属性本身相互依赖。

与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。

 

实际案例

这里以游戏开发中人物的构造过程为例。在游戏中创建一个形象时,需要对每个部位进行创建。简化而言,需要创建头部,身体和四肢。

头部、体部、四肢

建造者模式 和 工厂模式比较,建造者模式更注重零部件的顺序问题

 创建一个整体的类:

package BuildderModel;
//整体
public class Person {
  
     String head;
     String body;
     String foot;
     
}

然后创建builder接口: 规范产品对象的各个组成部分的建造。这个接口规定要实现复杂对象的哪些部分的创建,并不涉及具体的对象部件的创建

package BuildderModel;

//创建人体Builder  在使用设计模式时候要学会使用接口或者抽象类
public interface PersonBuilder {

    //构造头部
    void buildHead();
    
    //构造体部
    void buildBody();
    
    //构造腿部
    void buildFoot();
    
    //组装部件
    Person builderPerson();
    
      
    
}

 

 

实现接口,构建不同的任务:

任务1,构建美国人

package BuildderModel;

public class AmericanMan implements PersonBuilder {
      private Person person;
    
      public AmericanMan() {
        person=new Person();
    }
      
       public void buildHead() {
        person.setHead("五官轮廓明显");
        
      }
    
       public void buildBody() {
        person.setBody("个子高");
     }
           
       public void buildFoot() {
        person.setFoot("腿长");
     }
    
       public Person builderPerson(){
            return person;
        }  
       
       
}

 

人物2,构建日本人

package BuildderModel;

public class JapaneseMan implements PersonBuilder {
          private Person person;      
         
          public JapaneseMan() {
            person=new Person();
        }      
           public void buildHead() {
            person.setHead("狰狞");
          }
        
           public void buildBody() {
            person.setBody("个子矮");       
          }
           public void buildFoot() {
            person.setFoot("腿短");
         }    
         
        public Person builderPerson(){
            return person;
        }   
           
           
}

ConcreteBuilder:实现builder接口,针对不同的业务逻辑,具体化复杂对象的各个部件的构造。构建完成后,提供产品的实例。 组合时候一定要有顺序!!!!!

package BuildderModel;
//构建人物 整合所有部件
public class PersonDirector {
   
     public Person createPerson(PersonBuilder personBuilder){
         //一定是有构建顺序的!
         personBuilder.buildHead();
         personBuilder.buildBody();
         personBuilder.buildFoot();
         
         return personBuilder.builderPerson();
     }
     
     public static void main(String[] args) {
         PersonDirector personDirector = new PersonDirector();
         Person americanPerson = personDirector.createPerson(new AmericanMan());
         System.out.println(americanPerson.getHead());
         System.out.println(americanPerson.getBody());
         System.out.println(americanPerson.getFoot());     
    }
     
}

运行结果:

 

工厂模式和建造者模式很像

工厂设计模式 不会提供业务逻辑包装 并且 建造者模式重视顺序

 

实际案例:

接口:

public interface NoLockHandler {

    void executor(Object... param);
}

接口实现类:

public class SimpleNoLockHandler implements NoLockHandler {

    @Override
    public void executor(Object... param) {
        System.out.println("我是excutor实现方法");
    }
}

handler:

public class MyInvocationHandler implements InvocationHandler {

    private Object target;

    public MyInvocationHandler(Object target) {
        this.target = target;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws InvocationTargetException, IllegalAccessException {
        System.out.println(args);
        method.invoke(target, args);
        return null;
    }
}

建造者+工厂+单例:

public class HandelrFactory {


    /**
     * 接口或者接口的实现类
     */
    private final Class<? extends NoLockHandler> clazz;

    private final Object[] params;

    /**
     * 通过静态方法去实例化静态内部类
     *
     * @return
     */
    private static Builder newInstance() {
        //调用静态内部类的方法 去实例化另一个静态内部类
        return Instance.instance;
    }

    /**
     * 静态内部类 去调用 newInstance方法
     *
     * @return
     */
    public static Builder builder() {
        //调用 newInstance方法 instance方法去实例化build静态内部类
        return newInstance();
    }

    /**
     * 私有化构造函数
     *
     * @param clazz
     * @param params
     */
    private HandelrFactory(Class<? extends NoLockHandler> clazz, Object... params) {
        this.params = params;
        this.clazz = clazz;
    }

    private static class Instance {
        //实例化静态内部类
        public static final Builder instance = new Builder();
    }

    public void bind() throws IllegalAccessException, InstantiationException {
        //传递过来的字节码接口 实例化出接口类
        NoLockHandler noLockHandler = this.clazz.newInstance();
        //真正的handler
        InvocationHandler handler = new MyInvocationHandler(noLockHandler);
        NoLockHandler result = (NoLockHandler) Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[]{NoLockHandler.class}, handler);
        result.executor(this.params);
    }

    /***************静态内部类**********************/
    //静态内部类  类调用此类 可以直接调用此类内部方法 访问的成员变量 也必须是静态的!
    static class Builder {

        private Class<? extends NoLockHandler> clazz;

        private Object[] params;

        public Builder setClazz(Class<? extends NoLockHandler> clazz) {
            this.clazz = clazz;
            return this;
        }

        public Builder setParams(Object... params) {
            this.params = params;
            return this;
        }

        public HandelrFactory bulid() {
            //返回最终的实例对象 然后就可以执行这个实例对象里面的方法了
            return new HandelrFactory(this.clazz, this.params);
        }
    }

    /***********************************************/

    public static void main(String[] args) throws InstantiationException, IllegalAccessException {
        HandelrFactory
                .builder()
                .setClazz(SimpleNoLockHandler.class)
                .setParams("12345")
                .bulid()
                .bind();

        System.out.println();
    }
}

结果:

 

 

Python 爬虫实战:科研数据库学术论文数据抓取 在科研工作中,学术论文是获取前沿知识和研究方法的重要资源。然而,手动从科研数据库中查找和整理论文信息往往耗时费力。幸运的是,Python 爬虫技术可以自动化这一过程,帮助我们高效地抓取和管理学术论文数据。本文将详细介绍如何使用 Python 爬虫技术抓取科研数据库中的学术论文数据,并进行全字段提取和文献管理,助力科研工作。 阅读详情

相关推荐

GmSSL国密双证书实战:从生成到Nginx配置全流程

本文详细介绍了使用GmSSL工具生成国密双证书(签名证书与加密证书)并配置Nginx支持国密HTTPS(TLCP协议)的全流程。内容涵盖环境准备、自签CA创建、服务器双证书生成、Nginx单向/双向认证配置以及兼容性处理,为部署符合国密标准的HTTPS服务提供实战指南。

weixin_29276847的博客 479

设计模式—建造者模式及实例(BuilderPattern)

建造者模式(Builder Pattern)也称生成器模式,它属于创建型模式。

小嵩的博客 4002

量子阱技术解析:从基础原理到前沿应用

本文深入解析量子阱技术,从微观“能量游泳池”的基础原理出发,阐释了其通过限制电子实现能级量子化,从而精确调控发光波长的核心机制。文章详细探讨了量子阱在半导体激光器和LED中的革命性应用,如实现低阈值电流与高亮度显示,并展望了其在能带工程及量子级联激光器等前沿领域的发展与挑战。

weixin_29267307的博客 282

建造者模式BuilderPattern

建造者模式BuilderPattern建造者模式简介应用场景:优点:缺点:典型例子:装配电脑。建造者模式结构:四大类产品类抽象建造者类具体建造者类指挥部类 建造者模式简介 一件产品/一个事物,由多个部件组成,这些部件可以自由替换,每个部件都有自己的创建过程,那么需要这个产品的客户端(使用者)可以忽略每个部件的创建过程,或者说使用者不关心你产品每个部件是如何产生的,你只要给我完整的产品就行,至于你各部件怎么建的、建好后又是如何装配成完整产品的,那是你的事,别特么让我知道,我嫌烦。 应用场景: (1) 需要生成

diezhongbing1358的博客 293

某商场G区火灾自动报警与控制系统设计

某商场G区火灾自动报警与控制系统设计 摘要:随着我国经济建设的迅速发展,人民生活水平不断提高,城市用地日益紧张,促使建筑物正朝着高层化、密集化方向发展。高层建筑的特点决定其火灾的危险性和高层建筑的火灾自动报警系统的重要性,一套完整的火灾自动报警及联动控制系统是高层建筑发生火灾时人们生命财产的有利保障,是能否快速准确地发现火情,把火灾扑灭在萌芽状态的关键所在。文章通过消防设计,论述了火灾自动报警及消...

weixin_44026784的博客 5366

半导体制造中的通孔缺陷与冗余通孔技术解析

通孔(Via)是半导体制造中连接不同金属层的关键结构,其可靠性直接影响芯片良率。随着工艺节点演进至28nm及更先进制程,通孔缺陷导致的良率损失日益显著,主要表现为完全开路和高阻态两种失效模式。冗余通孔技术通过在关键位置增加备用连接,可有效提升芯片可靠性,其实现涉及物理冗余与电气冗余两种方案。该技术在7nm/5nm工艺中已证明可将通孔相关缺陷率降低10-100倍,但面临设计规则复杂性、规模处理效率和动态合规验证等工业化挑战。智能双切通孔插入流程通过动态DRC规则解析、奇偶层级并行处理和增量式验证等创新方法,显

weixin_35982453的博客 383

建造者模式(BuilderPattern)

原文参考出处:https://blog.csdn.net/u010102390/article/details/80179754 介绍: 建造者模式:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可...

静风落叶的博客 221

时间序列学习(4):平稳性检验(单位根检验、ADF检验)

时间序列学习(4):平稳性检验(单位根检验、ADF检验)1、单位根检验2、ADF检验3、指数走势的检验4、对数收益率序列检验 相关图可以大致判断序列是否平稳。但是,这毕竟不是严格的。 这篇笔记来就谈一谈平稳性的检验。 到目前为止,我们有了以下的时间序列模型: 白噪声; 随机游走; AR模型; MA模型; ARMA模型。 我们知道白噪声、MA模型一定是平稳的(这里的平稳都是弱平稳);随机游走一定是不平稳的;ARMA模型取决于其AR部分。 所以唯一需要做平稳性检验的就是AR模型。 1、单位根检验 先来看一阶

lucialucia的博客 7万+

设计模式之建造者模式(BuilderPattern)

一.意义 将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 说明:复杂对象的构建,比如一个对象有几十个成员属性,那么我们在创建这个对象,并给成员属性赋值时,就会很麻烦。采用建造者模式,就是把创建对象并给成员属性赋值的工作,分离出来,由建造者角色来完成,业务程序员直接调用导演类,获得复杂对象即可,无需再进行对象的创建工作了。 二.角色 建造者模式涉及到一下几种角色: Builder(抽象建造者):它为创建一个产品Product对象的各个部件指定抽象接口,在该接口中一般声明两类方

敲代码的小小酥的博客 415

PHM 2010数据集解读

PHM数据挑战赛是一项面向所有潜在与会者的竞赛。今年的挑战集中在使用测力仪、加速度计和声发射数据估计高速数控铣床刀具的RUL上。 博客对PHM 2010数据集的组成和信号进行了可视化。

cnjs1994的博客 7648

STM32 W5500 Freemodbus Modbus TCP协议功能实现

STM32F103VCT6 W5500(SPI1),实现Modbus-TCP协议的功能

坚韧与专注 2万+

设计模式——建造者模式(BuilderPattern)

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

雪夜&流星的专栏 571

零基础做完YOLOv8船只检测系统:HRSC2016数据集 + 完整UI,稳过答辩

亲爱的同学,通过这篇教程,你已经掌握了“基于YOLOv8的HRSC2016微小船只检测系统”从数据集处理、模型训练到Tkinter界面开发的全流程。这个课题既贴合“海事智能化”的产业战略,又涵盖了“目标检测、深度学习、界面开发”等多个毕设评分点,非常适合作为计算机或海事工程专业的毕业设计。在实践中,你可能会遇到“海面背景复杂导致船只漏检”“微小船只识别精度不足”“UI与模型推理同步卡顿”等挑战——别担心,这些都是技术成长的必经之路。

FJN110的博客 108

设计模式之建造者模式BuilderPattern(七)

建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。@Data:这是Lombok中提供的Getter和Setter方法和toString方法的注解。@AllArgsConstructor:这是Lombok中提供的包含所有参数的构造方法注解。@NoArgsConstructor:这是Lombok中提供的不包含任何参数的构造方法注解。3、OrderBuilder类。1、OrderItem类。

徐泗空的博客 1331

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

您的设计模式——建造者模式【Builder Pattern】

又是一个周三,快要下班了,老大突然又拉住我,喜滋滋的告诉我“牛叉公司很满意我们做的模型, 又签订了一个合同,把奔驰、宝马的车辆模型都交给我我们公司制作了,不过这次又额外增加了一个新需 求:汽车的启动、停止、喇叭声音、引擎声音都有客户自己控制,他想什么顺序就什么顺序,这个没问题 吧?”。 看着老大殷切的目光,我还能说啥,肯定的点头, “没问题! ” ,加班加点做呗, “再苦再累就当自己二 百

454

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

设计模式建造者模式(BuilderPattern)

核心模块:Builder抽象建造者、ConcreteBuilder具体建造者、Product产品角色、Director指挥者 所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git 使用场景:构建复杂对象,或者构件过程中需要强制的分布措施; 优点:客户可以精细的控制构建过程,将产品创建过程和产品本省分离,细节依赖于

didiao11300的专栏 293

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

设计模式——建造者模式

又叫生成器模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。2)、构造者模式,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。3)、构造者模式主要解决在软件系统中,当面临一个复杂对象的创建工作时,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临剧烈的变化,但是将它们组合在一起的算法却相对稳定。

程序猿进阶 1773

生成器模式/建造者模式(BuilderPattern)

生成器模式/建造者模式(BuilderPattern):通过多个简单对象累积逐步构建成目标复杂的对象。这种设计模式属于创建型模式,提供创建对象的某种方式。 生成器模式/建造者模式的使用:在软件系统中有时候面临”某个极端复杂的对象"的创建需求,其通常由各个部分的子对象(部件对象)采用一定的算法构成;由于极端复杂需求的变化,这个极端复杂对象的各个部分经常面临着剧烈的变化,但是将各个部件组合在一起的逻辑算法却相对稳定。 基本的部件对象本身不会变但部件的组合经常变化时。 生成器(建造者)模式优点:建造者独立,易扩展

yanhaijunyan的博客 281

设计模式实现(四)建造者模式

1.什么是建造者模式(Builder Pattern) 建造者模式(Builder Pattern)又叫生成器模式,是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象,从而达到代码复用性。 建造者模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。 2.建造者模式的优点 在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。 用户只需要给出指定复杂对象的类型和内容; 建造

WormholeStack 1278

JAVA设计模式之建造者模式详解

建造者模式(builder pattern), 也被称为生成器模式, 是一种创建型设计模式.定义: 将一个复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。**建造者模式要解决的问题 **建造者模式可以将部件和其组装过程分开,一步一步创建一个复杂的对象。用户只需要指定复杂对象的类型就可以得到该对象,而无须知道其内部的具体构造细节。

励志成为一名优秀的全能型软件开发工程师。 4282

设计模式之建造者模式【BuilderPattern】

    建造者模式属于创建型模式的一种。建造者模式主要是用于创建一个复杂的对象。使相同的创建过程可以创建不同的对象。建造者模式提供了一种创建对象的最优模式。建造者模式主要用于创建复合对象,复合对象就是某个类具有不同的属性。在一个对象的每一部分经常变化,但是将每一个对象组合起来的算法方式不变化的情况下使用建造者模式再合适不过。 话不多说,接下来看下建造者模式的实现类图: 先看下接口Ite...

董先生的远方 208

【设计模式从青铜到王者】第八篇:创建型模式之建造者模式(BuilderPattern)

系列文章目录 前言 建一栋房子总共分几步?建造者模式告诉你答案! 1.建造者模式简介 2.建造者模式结构 3.建造者模式代码实例 3.1.定义产品类House 3.2.定义建造者 3.2.1.定义抽象建造者AbstractBuilder 3.2.2.定义具体建造者 3.3.定义指挥者 3.4.客户端代码示例 3.5.效果 4.建造者模式总结 优点: 缺点: 适用环境: 总结...

森明帮大于黑虎帮的博客 345

建造者模式(BuilderPattern)

基本介绍:    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.作用:    在用户不知道对象的建造过程和细节的情况下就可以直接创建复杂的对象。用户只需要给出指定复杂对象的类型和内容, 建造者模式负责按顺序创建复杂对象.package org.brando; /** * * 类说明: 测试类 * @author Brando 2018年3月29日 下午2:03...

BrandoLv 178
上一篇: 代理模式
下一篇: 今天的一些想法
Art&Code
博客等级 码龄7年 77粉丝 554原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值