自己的网站发文章怎么做外链手机建设网站
2026/1/8 0:25:22 网站建设 项目流程
自己的网站发文章怎么做外链,手机建设网站,北京软件开发公司招聘,沧州网站的公众号文章目录0.个人感悟建造者模式1. 概念2. 适配场景(什么场景下使用)3. 实现方法3.1 实现思路3.2 UML类图4. 代码示例5. 优缺点6. 源码分析-JDK中的StringBuilder实现分析7. vs抽象工厂模式0.个人感悟 建造者模式也是很典型的创建型设计模式。主要目的是将对象的构建和表示分离构建角色就负责构建过程(建造者 指挥者)对象(产品)只表示自身属性建造者模式很能表现编程的一个思想:面向接口编程。我们面向对象来建模抽取不同的角色进行分工角色和角色之间依赖抽象方便具体实现的替换比如这里的具体建造者截止到目前创建型设计模式复习完了。整体而言目的都是创建对象根据不同的情况来选择不同的模式从而尽量达到1核(高内聚低耦合)4性(复用性 可读性 维护性 稳定性)7大原则(设计原则)建造者模式很容易联想到链式调用比如常用的lombok Builder注解可以提高开发效率有兴趣可以详细了解下原理和使用方法建议实际工作中多尝试使用设计模式,不怕犯错祝大家元旦快乐建造者模式1. 概念英文定义(摘自《设计模式可复用面向对象软件的基础》):Separate the construction of a complex object from its representation so that the same construction process can create different representations.中文翻译:将一个复杂对象的构建与其表示分离使得同样的构建过程可以创建不同的表示。理解:将复杂对象的构建过程与最终产品解耦2. 适配场景(什么场景下使用)适合的场景:创建复杂对象: 当对象包含多个组成部分且这些部分需要按特定顺序或规则组合时构建过程需要精细化控制: 需要分步骤、分阶段构建对象且构建过程可能变化产品有多个变体: 同一个构建过程需要产生不同表示的产品分工合作产品的创建和产品的使用由不同的模块、责任人负责天然契合建造者模式常见的具体场景举例:配置对象的构建(如数据库连接配置)文档生成器(HTML、PDF等不同格式)套餐组合复杂查询构建游戏角色创建系统3. 实现方法3.1 实现思路分离关注点: 构建过程由指挥者(Director)控制具体构建由建造者(Builder)实现构建与表示分离: 同样的构建步骤可以产生不同的产品表示分步构建: 允许分步骤、精细化地构建复杂对象控制反转: 客户端不直接创建对象而是通过指挥者间接创建3.2 UML类图产品(Product): 创建要构建的复杂对象包含所有组成部分建造者接口(Builder): 声明创建产品各个部分的抽象方法具体建造者类(ConcreteBuilder):实现Builder接口维护当前产品的表示提供获取最终产品的方法指挥者(Director):封装构建过程使用Builder接口逐步构建产品客户端: 客户端创建具体建造者将其传递给指挥者然后获取最终产品4. 代码示例以互联网大厂夜宵文化为例:,简化一下流程规定夜宵套餐包含 水果 饮料 主食忽略金额产品类publicclassNightSnack{privateStringfruit;privateStringdrink;privateStringstapleFood;publicStringgetFruit(){returnfruit;}// 省略}建造者类族// 1.抽象建造者publicabstractclassSnackBuilder{NightSnacknightSnacknewNightSnack();publicabstractvoidbuildFruit();publicabstractvoidbuildDrink();publicabstractvoidbuildStapleFood();publicNightSnackgetNightSnack(){returnnightSnack;}}// 2.指挥者publicclassSnackStall{privateSnackBuildersnackBuilder;publicSnackStall(SnackBuildersnackBuilder){this.snackBuildersnackBuilder;}publicNightSnackconstruct(){// 水果snackBuilder.buildFruit();// 饮料snackBuilder.buildDrink();// 主食snackBuilder.buildStapleFood();returnsnackBuilder.getNightSnack();}}// 3.具体建造者 套餐ApublicclassSnackAextendsSnackBuilder{OverridepublicvoidbuildFruit(){nightSnack.setFruit(西瓜一个);}OverridepublicvoidbuildDrink(){nightSnack.setDrink(可乐一瓶);}OverridepublicvoidbuildStapleFood(){nightSnack.setStapleFood(螺蛳粉一碗);}}// 4.具体建造者 套餐BpublicclassSnackBextendsSnackBuilder{OverridepublicvoidbuildFruit(){nightSnack.setFruit(酸橘子一筐);}OverridepublicvoidbuildDrink(){nightSnack.setDrink(外星人饮品一瓶);}OverridepublicvoidbuildStapleFood(){nightSnack.setStapleFood(面包一块);}}客户端:publicclassClient{staticvoidmain(){SnackBuildersnackBuildernewSnackA();// 这里可以进行套餐更换SnackStallsnackStallnewSnackStall(snackBuilder);NightSnacknightSnacksnackStall.construct();System.out.println(STR.套餐内容: \{nightSnack.getFruit()} \{nightSnack.getDrink()} \{nightSnack.getStapleFood()});}}5. 优缺点结合1核(高内聚低耦合)4性(复用性 可读性 维护性 稳定性)7大原则(设计原则):优点:高内聚低耦合构建过程封装在指挥者中与具体建造者解耦产品与构建过程分离符合单一职责原则复用性同样的构建过程可以创建不同表示的产品指挥者代码可以复用支持不同建造者可读性分步骤构建逻辑清晰维护性新增产品变体只需添加新的建造者无需修改现有代码符合开闭原则稳定性可以确保产品的完整性避免构建不完整的对象构建过程可控减少错误缺点:复杂度增加需要创建多个类(Builder、Director、Product等)对于简单对象可能显得过于复杂性能开销相比直接创建对象有额外的对象创建和方法调用开销。这其实是设计模式的通病灵活性的代价灵活性受限产品必须有共同的接口限制了产品类型的多样性。当产品差异性很大时不推荐使用6. 源码分析-JDK中的StringBuilder实现分析主要关注append方法StringBuilder源码简化分析publicfinalclassStringBuilderextendsAbstractStringBuilder{// 1. 存储产品(字符串)的字符数组// char[] value; // 继承自AbstractStringBuilderpublicStringBuilder(){super(16);// 初始容量}publicStringBuilder(intcapacity){super(capacity);}publicStringBuilder(Stringstr){super(str.length()16);append(str);// 初始内容}// 2. 建造者方法 - 添加部件OverridepublicStringBuilderappend(Stringstr){super.append(str);returnthis;// 关键返回this实现链式调用}OverridepublicStringBuilderappend(charc){super.append(c);returnthis;}OverridepublicStringBuilderappend(inti){super.append(i);returnthis;}// 3. 获取最终产品OverridepublicStringtoString(){// 创建String对象使用当前的字符数组returnnewString(value,0,count);}}}AbstractStringBuilder中的appendabstractsealedclassAbstractStringBuilderimplementsAppendable,CharSequencepermitsStringBuilder,StringBuffer{publicAbstractStringBuilderappend(Stringstr){if(strnull){returnappendNull();}intlenstr.length();ensureCapacityInternal(countlen);putStringAt(count,str);countlen;returnthis;}}测试:publicclassStringTest{staticvoidmain(String[]args){// 典型的建造者模式使用方式StringresultnewStringBuilder().append(Hello)// 构建第一部分.append( )// 构建第二部分.append(World)// 构建第三部分.append(!)// 构建第四部分.reverse()// 对构建结果进行操作.toString();// 获取最终产品System.out.println(result);// 输出: !dlroW olleH}}可以看到StringBuilder中的建造者模式特点:内聚的建造者: StringBuilder同时承担了建造者和指挥者的职责链式调用: 每个构建方法返回this支持流畅接口(Fluent Interface)。这个在实际工作中常用Lombok的 Builder注解延迟创建: 只有在调用toString()时才创建最终的String对象7. vs抽象工厂模式关键区别总结:建造者模式: 关注如何构建一个复杂对象构建过程是重点。粒度更细可以理解为车间维度抽象工厂模式: 关注创建什么产品产品家族是重点。粒度更粗可以理解为工厂维度实际选择经验建议:当需要创建的对象结构复杂、构建步骤多时使用建造者模式当需要创建一系列相关对象时使用抽象工厂模式在某些复杂场景下两种模式可以结合使用一个粗粒度一个细粒度参考韩顺平 Java设计模式张维鹏 Java设计模式之创建型建造者模式设计模式实战——开发中经常涉及到的建造者模式

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询