在计算机中,Builder是什么意思?一文读懂

thbcm阅读(1061)

在编程和计算机领域,Builder(构建器)是一个非常重要的概念,但它并不是一个单一的定义,而是有多种含义。具体来说,它可以指一种设计模式,也可以指用于自动化构建软件的工具。本文将从不同角度为你详细解读 Builder 的含义,帮助你全面理解它在计算机中的应用。

一、什么是 Builder?

Builder在计算机中主要有两种含义:

  1. 设计模式中的 Builder 模式:一种创建型设计模式,用于逐步构建复杂对象。
  2. 构建工具(Build Tool):用于自动化软件编译、打包和部署的工具。

接下来,我们将分别介绍这两种含义及其应用场景。

二、设计模式中的 Builder 模式

(一)什么是 Builder 模式?

Builder 模式(构建器模式)是一种创建型设计模式,用于逐步构建复杂对象。它将对象的构造过程与其表示分离,使得相同的构建过程可以创建不同的表示。这种模式的核心思想是将复杂对象的构建过程分解为多个简单的步骤,每个步骤负责设置对象的某个部分。

(二)Builder 模式的组成

Builder 模式通常包含以下角色:

  1. Product(产品角色):表示正在构建的复杂对象。
  2. Builder(抽象构建器):定义了构建产品所需的接口。
  3. ConcreteBuilder(具体构建器):实现了 Builder 接口,具体负责构建和装配各个部件。
  4. Director(指挥者):负责安排构建的顺序,并通过Builder 接口调用具体构建器。

(三)Builder 模式的应用场景

Builder 模式适用于以下场景:

  1. 对象构造过程复杂:当一个对象的构造过程非常复杂,且需要根据不同的需求动态调整构造过程时。
  2. 多参数构造:当一个类的构造函数或方法包含大量参数,尤其是这些参数中存在可选参数时。
  3. 对象结构复杂:当需要构建的对象包含多个子对象或复杂的属性时。

(四)Builder 模式的实现示例

以下是一个典型的 Builder 模式实现示例:

1. 定义产品类(Computer类)

public class Computer {
    private String board;       // 主板类型
    private String display;     // 显示器类型
    private String os;          // 操作系统


    // 设置主板
    public void setBoard(String board) {
        this.board = board;
    }


    // 设置显示器
    public void setDisplay(String display) {
        this.display = display;
    }


    // 设置操作系统
    public void setOs(String os) {
        this.os = os;
    }


    // 重写toString方法,方便打印对象信息
    @Override
    public String toString() {
        return "Computer{" +
                "board='" + board + '\'' +
                ", display='" + display + '\'' +
                ", os='" + os + '\'' +
                '}';
    }
}

2. 定义抽象构建器(Builder接口)

public abstract class Builder {
    // 构建主板的方法
    abstract void buildBoard(String board);


    // 构建显示器的方法
    abstract void buildDisplay(String display);


    // 构建操作系统的方法
    abstract void buildOs();


    // 返回最终构建的产品
    abstract Computer build();
}

3. 实现具体构建器(MacBookBuilder类)

public class MacBookBuilder extends Builder {
    private Computer computer = new Computer();  // 创建一个Computer对象


    // 实现构建主板的方法
    @Override
    public void buildBoard(String board) {
        computer.setBoard(board);  // 设置主板类型
    }


    // 实现构建显示器的方法
    @Override
    public void buildDisplay(String display) {
        computer.setDisplay(display);  // 设置显示器类型
    }


    // 实现构建操作系统的方法
    @Override
    public void buildOs() {
        computer.setOs("macOS");  // MacBook默认使用macOS
    }


    // 返回构建好的Computer对象
    @Override
    public Computer build() {
        return computer;
    }
}

4. 定义指挥者(Director类)

public class Director {
    private Builder builder;  // 持有一个Builder对象


    // 构造函数,传入具体的Builder对象
    public Director(Builder builder) {
        this.builder = builder;
    }


    // 构建方法,指定构建过程
    public void construct(String board, String display) {
        builder.buildBoard(board);  // 构建主板
        builder.buildDisplay(display);  // 构建显示器
        builder.buildOs();  // 构建操作系统
    }
}

5. 使用示例(Test类)

public class Test {
    public static void main(String[] args) {
        // 创建具体的构建器(MacBookBuilder)
        Builder builder = new MacBookBuilder();  


        // 创建指挥者,并传入构建器
        Director director = new Director(builder);  


        // 指定构建过程
        director.construct("Intel Board", "Retina Display");


        // 获取最终构建的Computer对象
        Computer computer = builder.build();


        // 打印Computer对象的信息
        System.out.println(computer.toString());


        // 在控制台输出w3cschool的提示信息
        System.out.println("更多编程知识,请访问 w3cschool.cn");
    }
}

三、构建工具(Build Tool)

除了设计模式中的 Builder 模式,Builder在计算机中还可以指构建工具(Build Tool)。构建工具是用于自动化软件编译、打包和部署的工具,常见的构建工具包括:

  1. MavenJava 项目的构建工具,用于依赖管理、项目构建和生命周期管理。
  2. Gradle:一种灵活的构建工具,支持多种编程语言和项目类型。
  3. Ant:早期的 Java 构建工具,主要用于自动化编译和部署。
  4. Make:在 C/C++ 项目中常用的构建工具,通过 Makefile 定义构建规则。

这些工具通过脚本或配置文件定义构建流程,简化开发和部署过程。

四、总结

在计算机领域,Builder 可以指设计模式中的 Builder 模式,也可以指构建工具。无论是用于构建复杂对象的设计模式,还是用于自动化编译和部署的工具,Builder 都扮演着重要的角色。希望这篇文章能帮助你全面理解 Builder 的含义和应用场景。

0基础靠 AI 实现年入百万!“小猫补光灯”开发者经验分享

thbcm阅读(208)

两个月前,一款名为“小猫补光灯”的 APP 火爆全网,不仅在小红书斩获百万流量,更是在短短半个月内登顶了 App Store 付费榜单。

而令人惊讶的是,它的开发者在半年前甚至没写过一行代码!但借助 AI 编程工具,他在仅一个小时内就完成这款爆款 APP 从设计到上线的全过程!

豆包MarsCode「 AI 开发者 Talk」第一期的开场嘉宾,特别邀请到了“小猫补光灯”开发者【花生老师】,为大家带来《零基础小白入门 AI 编程》的经验分享:普通人在 AI 时代如何撬动财富杠杆,巧用 AI 编程工具,一个人也能成为一支队伍!

从个人经历到实践案例

小猫补光灯是怎么诞生的?

花生老师最初在大厂中做非技术类岗位的工作,裸辞后转型成为自媒体博主AI 编程鼓励师,这近半年来,没有编程背景的他居然已经用 AI 开发了三十多款产品

其中最有名的当然是火爆全网的“小猫补光灯”,半个月内便登顶了 Appstore 付费榜的爆款产品,没有技术背景的他到底是怎么做出来的呢?

受其他开发者用 AI 开发屏幕手电筒案例的启发,花生老师非常对产品使用场景进行了深刻洞察:不同颜色的发光屏幕刚好能够作为补光色卡使用,刚好满足了爱自拍的女性用户的需求。

说干就干,不到一个小时,花生老师就将这款产品开发了出来并发布到小红书,出乎意料的是,有关“小猫补光灯”第一篇笔记就已斩获了百万阅读和八万点赞!其中有一半的人阅读帖子后会选择下载这款产品。

花生老师总结了两点爆款秘诀

  1. 拓展产品能力边界,提升产品的使用效率: 相比于一只手机搜索纯色卡片调高显示屏亮度作为补光灯和另一只手机当作照相机的拍照方式,“小猫补光灯”一步到位地将原有的若干个步骤简化成打开 APP 即可,甚至还能实时看到补光后画面效果,大大改善了原来的拍照体验。
  2. 提升用户使用频次及留存率: 原有的自助补光拍照形式需要两台手机,这让只有一台手机的用户难以完成补光拍照,但“小猫补光灯”让一个人也能美美自拍,大大地提升了用户使用频次及留存率。

在后续的推广营销上,花生老师反直觉地将选择将产品改为付费使用,而非传统地用广告模式去做营收增长,并且将“收费一元”打造成营销事件,结果收费后第二天下载量竟然也同样反直觉地不降反增

拥抱AI编程

撬动财富杠杆,解锁新机遇

Naval 四大财富杠杆解读:劳力、资本、媒体、代码

资本依赖资金的积累和运作,通过投资等方式创造被动收入;而劳力则依赖个人的时间和精力创造收入,属于财富主动收入模式。

相比之下,媒体和代码则为财富带来新的可能:二者都能以零边际成本的方式在24小时内不断分发并持续产生影响力和收入。

Naval 的四大财富杠杆

为什么现在是学习 AI 编程的最佳时机?

过去的 AI 编程工具存在复制粘贴繁琐或技术壁垒高的特点,对普通人并不友好。

但目前 AI 编程工具和大模型上的突破,使得 AI 生成代码的精度达到了70%-90%的可用率,极大地降低了开发难度。无编程背景的人也能借助 AI 工具进行项目开发,进行 bug 修复,使得每个人都有机会成为程序员,迈步进入 AI 编程的时代。

IDE模式+更强的模型能力:人人都是工程师

AI编程学习指南

从学习路径到 AI 编程方法论

克服恐惧

很多人在面对编程时,都有强烈的陌生感甚至恐惧感,这都是源于对编程语言和工具等学习难度的误解。为了克服这种恐惧,最好的方法是抱着了解的心态开始:

  1. 观看教程视频: 可以通过一些演示视频,比如豆包MarsCode AI 编程云课堂的课程视频,帮助你理解编程的基本概念和 AI 编程工具的使用方式和技巧。
  2. 学习编程语言的基本结构: 比如阅读《 Python 编程从入门到实践》这样的书籍,掌握编程语言的基础构成,而不是一开始就研究学习所有细节。关键在于要了解自己不知道什么,这样就可以了更有针对性地向 AI 求助。

克服学习编程的恐惧

巧用 AI 学习

  1. AI 是最好的老师: AI 编程工具可以帮助你解决大部分问题,学习过程中要逐渐培养与AI协作的思维。遇到困难时,清晰地表述自己的问题,把AI当作老师,而不需要过多依赖他人。
  2. 了解 AI,驾驭 AI
    • AI 的随机性: 由于 AI 是基于概率生成结果,它可能会给出不同的解决方案或使用不同的编程语言。为了降低这种随机性,你可以明确要求AI使用某种特定的编程语言。
    • AI 的平庸性: AI 倾向于生成比较平庸的结果,但你可以直接提问 AI 有什么可以优化现有代码的框架,甚至要求它参考某种具体的风格,进而指挥 AI 生成更精美的网页效果或更专业的代码。
    • 上下文长度限制: 目前 AI 理解上下文的长度有限,可能无法一次性理解整个项目的所有代码。达到上下文长度限制后,可以继续将相关代码片段提供给 AI 重新提问,帮助它更好地理解项目背景。
    • 系统-思考: 如果 AI 反复修复同一个 bug 无效,可以采用“系统—思考”的方法,即让 AI 先分析原因,提供多个解决方案,并给出每个思考方案的优缺点,这可以帮助你更好地解决问题。

先完成再完美

  1. 不要只看教程,立即着手做: 观看一个两个视频后,就可以立即着手实践 AI 编程了。通过复刻老师的项目,你将快速产生成就感,并加深对编程的理解。 即刻实操:从100%复制学习开始
  2. 独立完成项目: 在完成基础的复刻后,尝试做自己的项目,解决实际生活或工作中的问题。这不仅可以巩固你的编程知识,还能进一步激发创造力。 花生老师过往的AI编程成果
  3. 先做十个“垃圾”出来: 不要追求完美,一开始做一个简单的产品,后期不断迭代总能有不错的结果。在这个过程中,你编写 prompt 的技巧和编程的能力都会大大提高。

别想着一次成功:先完成再完美

好产品是长出来的:不断发布产品和收集反馈

快速发布和持续迭代是产品成长的关键,通过洞察用户反馈,产品可以让用户在实践中不断优化,与共同成长。

以“小猫补光灯”为例,三个月内不断收集小红书姐妹的反馈,前后迭代了十多个版本,每一次的修改都让产品更贴合用户的需求,相当于开发者和用户共同完成了“build in pulic”的过程,产品最终成长为用户量身打造的样子。

不断发布产品和收集反馈

看完花生老师的分享,你是否也充满干劲,准备利用 AI 编程创造更多可能了呢?

点击【豆包 MarsCode 官网】立即体验 AI 编程吧~

用 AI 一小时重构代码:豆包 MarsCode 实战教程

thbcm阅读(311)

相信程序员朋友们都遇到过这个问题:项目的演进过程中,代码往往会不断堆砌,如果缺乏对代码质量的关注,它会不可避免地走向混乱,逐渐演变成逻辑复杂、难以维护的“祖传代码”,想优化它但无从下手~

豆包 MarsCode AI 编程云课堂 「进阶开发实战系列」特邀【字节资深前端姚路行老师】为大家带来代码重构实战课程,帮助大家提升代码质量,提升项目可维护性,让开发过程更加轻松高效~

课前准备

下载并安装豆包 MarsCode

在官网下载并安装好豆包MarsCode 插件:

克隆项目

本课程使用 AI 以 Next.js 框架生成的一个 todolist 项目

git clone https://github.com/ylx911229/todo-list_back.git

使用“code”命令来启动 Visual Studio Code 并将其打开

cd todo-list_back 
code .

安装依赖

npm i

启动项目

npm run dev

  • 项目依赖 Node.js 版本大于18.18.0,启动前确认好本地 Node.js 版本,版本过低可在 Node.js 官网下载安装

本地预览

打开浏览器,访问:http://localhost:3000,运行成功得到如下效果

课程内容

组件拆分

首先我们先让豆包 MarsCode 帮我们创建一个 components 目录,用于存放拆分出的组件,豆包 MarsCode 还贴心的告诉我们需要改 tailwind.config.ts 添加 components 目录,Tailwind CSS 就会扫描目录下的文件,以便应用相应的样式。

Workspace在app目录下创建components目录

接下来让豆包MarsCode 帮我们将项目合理拆分组件

如果由于输出 token 长度限制,拆分的组件没有输出完全的话,可以让豆包MarsCode 继续输出

Workspace 拆分出的组件没有输出完成,请继续输出

最后修改主文件,将主文件改写成对子组件的引入

Workspace 将主文件改写成对子组件的引入

资源抽离

类型声明的抽离,单独文件管理类型更清晰可读,另外,项目当中也会有很多可以多组件,多文件复用的常量,抽离出来统一管理,一处修改,多处受益

类型声明抽离

首先将主文件中的类型声明单独抽离一个文件

Workspace 将主文件中的类型声明单独抽离一个文件

接下来修改项目中所有文件对类型声明的引入方式以及引入路径

 Workspace 修改项目中所有文件对类型声明的引入方式以及引入路径

常量抽离

单独抽离项目中的常量,并修改项目中所有文件对常量的引入方式以及引入路径(输出简单的话,也可以在一条指令中引导豆包MarsCode 完成)

 Workspace 将项目中的常量单独抽离一个文件,并修改项目中所有文件对常量的引入方式以及引入路径

状态管理优化

当项目中一个组件内管理过多的状态时,代码会非常乱,并且可读性很差,我们可以根据状态的不同类型,去抽离独立的自定义 hooks ,让代码更加可读可维护,而当状态管理需要组件层层传递时,更好的做法就是将状态管理提升为全局状态管理,两种都是对状态管理的优化,选择更适合自己项目的方式

自定义hooks

将两个状态管理作为自定义 hooks 单独抽离,并改写主文件对他们的引入

Workspace 将从localStorage加载todos和保存todos到localStorage做为useLoadTodosFromLocalStorage和useSaveTodosFromLocalStorage两个自定义hooks单独抽离,并改写主文件对他们的引入

全局状态管理

将项目中的状态管理改为全局状态管理,主文件以及所有组件通过全局状态获取而不是通过 props 传递

Workspace 将项目中的状态管理改为全局状态管理,主文件以及所有组件通过全局状态获取而不是通过props传递

代码提交

最后我们提交代码时,可以让豆包MarsCode 帮我们总结一下改动,给一个合适的commit message

在本次课程中,我们了解到合理重构代码的思路,以及如何通过豆包 MarsCode 一步步对已有代码进行重构,最终完成项目的代码重构。相信听完课的你都能有所收获并尝试付诸实践,提高自己的代码质量以及开发效率。

点击【豆包 MarsCode 官网】立即体验 AI 编程吧~

2025,遇见更好的自己 | w3cschool编程狮新春特惠

thbcm阅读(169)

“如果你的梦想还没实现,那是因为你的努力还不够完美。” ——写给每个不愿认输的追梦人

亲爱的小伙伴,还记得你第一次下定决心学编程的那一刻吗?

可能是在某个深夜,梦想自己能够打造出一款伟大的产品;

可能是看到身边的同事因为技术实力获得升职加薪;

又或者是AI的出现,让自己对目前的工作轨迹感到迷茫…

每个选择学习编程的人,都在用行动证明:我们都渴望遇见更好的自己

 新年新气象,我们为你准备了一份特别的新春礼物

为了让2025成为你的突破之年,编程狮准备了一份前所未有的”三重成长礼”。

这不仅仅是会员权益的限时加量升级,更是你成长蜕变的助推器!

开通2年VIP,加赠三重成长礼

现在开通2年VIP,投资798元(相当于每天仅需1个包子的钱),你将获得:

惊喜一:编程狮终身VIP (价值1998元)

有了它,你的学习之路将彻底开挂:

  • 免费畅学全站会员好课,课程将不断更新,未来价值更大
  • 500+专享题库,巩固编程知识
  • 100+在线编译工具,边学边练效率大幅提升
  • 课程证书加持,让简历更有竞争力
  • 离线缓存学习,上下班路上都是充电时间
  • 多端同步,随时随地都能继续学习进度

最重要的是:这一次投资,终身相伴!再也不用担心会员到期了。

惊喜二:AI使用导航年度VIP (价值168元)”

别人用AI coding,我还在手写代码…” 

2025年了,AI也得需要跟的上

现在,加赠AI使用导航年度VIP

让你快速抓住AI趋势,享受AI付费课程免费学(课程持续更新中)

AI编程从入门到精通,让AI真正成为你的得力助手。

下载地址:https://gitschool.cn/download

 

惊喜三:Stream HTTP抓包工具iOS版年度VIP (价值68元)

记得第一次调试接口时的手足无措吗? 

有了这个专业级HTTP抓包工具的年度VIP权益, 调试不再是噩梦,开发效率直接翻倍!(仅限iOS端可使用)

下载地址:https://apps.apple.com/cn/app/id6449997210

  

特别提醒:额外福利领取攻略

购买成功后,别忘了联系我们可爱的小师妹,领取Stream工具VIP和AI助手VIP哦!小狮妹微信号:w3cschool66(记得夸小师妹可爱,没准还能额外薅到羊毛呢~)

你距离改变,只差这一步

也许你会说: “等等看吧…” “以后再说…” “再考虑考虑…”

但请记住:机会总是留给有准备的人,也留给勇于抓住它的人。

2025年,就让我们一起:

  • 告别那个总是羡慕别人的自己
  • 告别那个犹豫不决的自己
  • 迎接那个正在成长的自己

现在购买,不仅省下1000+元,更重要的是:你离梦想中的自己,又近了一步。

点击立即抢购,手慢无!

寄语:希望若干年后回首,你会感谢此刻做出选择的自己。

注:活动最终解释权归编程狮所有。

VUE系列—深度解析 Vue 优化策略

thbcm阅读(200)

v-once 指令用于一次性地渲染元素及其子组件。在初始渲染后,它们将不会再响应数据变化,适用于那些不需要响应数据变化的静态内容。

「图论」Bron-Kerbosch 算法

thbcm阅读(186)

意思就是说,在
\(P\) 集合取出一点
\(u\) 时,如果
\(P\) 中还有一点
\(v\) 与当前的
\(u\) 点相连,那么下一层递归中我们会取出一次
\(v\),而在本次递归中也会有一次取出
\(v\) 从而导致计算重复,所以我们进行关键点优化:

联系我们