96SEO 2026-02-23 11:19 0
将一个复杂对象的构建与表示分离使得同样的构建过程可以创建不同的表示。

建造者模式可以将部件和其组装过程分开一步一步创建一个复杂的对象。
用户只需要指定复杂对象的类型就可以得到该对象而无须知道其内部的具体构造细节。
一辆汽车是由多个部件组成的,包括了车轮、方向盘、发动机等等.对于大多数用户而言,并不需要知道这些部件的装配细节,并且几乎不会使用单独某个部件,而是使用一辆完整的汽车.而建造者模式就是负责将这些部件进行组装让后将完整的汽车返回给用户.
抽象建造者类Builder这个接口规定要实现复杂对象的哪些部分的创建并不涉及具体的部件对象的创建。
接口完成复杂产品的各个部件的具体创建方法。
在构造过程完成后提供一个方法,返回创建好的负责产品对象。
指挥者类Director调用具体建造者来创建复杂对象的各个部分在指导者中不涉及具体产品的信息只负责保证对象各部分完整创建或按某种顺序创建(客户端一般只需要与指挥者进行交互)。
生产自行车是一个复杂的过程它包含了车架车座等组件的生产。
而车架又有碳纤维铝合金等材质的车座有橡胶真皮等材质。
对于自行车的生产就可以使用建造者模式。
这里Bike是产品包含车架车座等组件Builder是抽象建造者MobikeBuilder和HelloBuilder是具体的建造者Director是指挥者。
类图如下
{mBike.setFrame(碳纤维车架);}Overridepublic
{mBike.setSeat(橡胶车座);}Overridepublic
{mBike.setFrame(铝合金车架);}Overridepublic
{mBike.setSeat(真皮车座);}Overridepublic
{mBuilder.buildFrame();mBuilder.buildSeat();return
director.construct();System.out.println(bike.getFrame());System.out.println(bike.getSeat());}
建造者模式除了上面的用途外在开发中还有一个常用的使用方式就是当一个类构造器需要传入很多参数时如果创建这个类的实例代码可读性会非常差而且很容易引入错误此时就可以利用建造者模式进行重构。
在使用构造函数时,很容易搞错参数的顺序,传递进去错误的参数值,导致很有隐蔽的BUG出现.
1000;//构造方法参数过多,代码的可读性和易用性太差,在使用构造函数时,很容易搞错顺序,传递错误的参数值,导致很有隐蔽的BUGpublic
isDurable;this.connectionTimeout
//工作队列模式不需要设计交换机,但是队列名称一定要有if(exchange
RuntimeException(工作队列模式无需设计交换机);}if(queue
RuntimeException(工作队列模式名称不能为空);}if(isDurable
RuntimeException(工作队列模式必须开启持久化);}}else
//路由模式必须设计交换机,但是不能设计队列if(exchange
RuntimeException(路由模式下必须设置交换机);}if(queue
RuntimeException(路由模式无须设计队列名称);}}//其他验证方式,}public
msg){System.out.println(发送消息......);}public
{//每一种模式,都需要根据不同的情况进行实例化,构造方法会变得过于复杂.RabbitMQClient1
RabbitMQClient1(192.168.52.123,5672,2,sample-exchange,null,true,5000);client1.sendMessage(Test-MSG);}
set方式设置对象属性时,存在中间状态,并且属性校验时有前后顺序约束,逻辑校验的代码找不到合适的地方放置.
对象创建好了,就不能再修改内部的属性值,下面的client类就是典型的不可变对象,创建好的连接对象不能再改动
//工作队列模式不需要设计交换机,但是队列名称一定要有if(exchange
RuntimeException(工作队列模式无需设计交换机);}if(queue
RuntimeException(工作队列模式名称不能为空);}if(isDurable
RuntimeException(工作队列模式必须开启持久化);}}else
//路由模式必须设计交换机,但是不能设计队列if(exchange
RuntimeException(路由模式下必须设置交换机);}if(queue
RuntimeException(路由模式无须设计队列名称);}}//其他验证方式,this.exchange
//工作队列模式不需要设计交换机,但是队列名称一定要有if(exchange
RuntimeException(工作队列模式无需设计交换机);}if(queue
RuntimeException(工作队列模式名称不能为空);}if(isDurable
RuntimeException(工作队列模式必须开启持久化);}}else
//路由模式必须设计交换机,但是不能设计队列if(exchange
RuntimeException(路由模式下必须设置交换机);}if(queue
RuntimeException(路由模式无须设计队列名称);}}this.mode
msg){System.out.println(发送消息......);}/***
set方法的好处是参数的设计更加的灵活,但是通过set方式设置对象属性时,对象有可能存在中间状态(无效状态),*
RabbitMQClient2();client2.setHost(192.168.52.123);client2.setQueue(queue);client2.setMode(1);client2.setDurable(true);client2.sendMessage(Test-MSG2);}
目标类的构造方法要传入Builder对象Builder建造者类位于目标类内部,并且使用static修饰Builder建造者对象提供内置的各种set方法,注意set方法返回的是builder对象本身Builder建造者类提供build()方法实现目标对象的创建
目标类{//目标类的构造方法需要传入Builder对象public
业务方法(参数列表){}//Builder建造者类位于目标类内部,并且使用static修饰public
Builder(){//Builder建造者对象提供内置的各种set方法,注意set方法返回的是builder对象本身private
this;}//Builder建造者类提供build()方法实现目标对象的创建public
//工作队列模式不需要设计交换机,但是队列名称一定要有if(exchange
RuntimeException(工作队列模式无需设计交换机);}if(queue
RuntimeException(工作队列模式名称不能为空);}if(isDurable
RuntimeException(工作队列模式必须开启持久化);}}else
//路由模式必须设计交换机,但是不能设计队列if(exchange
RuntimeException(路由模式下必须设置交换机);}if(queue
RuntimeException(路由模式无须设计队列名称);}}return
msg){System.out.println(发送消息......);}
RabbitMQClient.Builder().setHost(192.168.52.123).setMode(2).setExchange(text-exchange).setPort(5672).setDurable(true).build();client.sendMessage(Test);}
工厂模式是用来创建不同但是相关类型的对象继承同一父类或者接口的一组子类由给定的参数来决定创建哪种类型的对象。
建造者模式是用来创建一种类型的复杂对象通过设置不同的可选参数“定制化”地创建不同的对象。
顾客走进一家餐馆点餐我们利用工厂模式根据用户不同的选择来制作不同的食物比
如披萨、汉堡、沙拉。
对于披萨来说用户又有各种配料可以定制比如奶酪、西红柿、起
建造者模式的封装性很好。
使用建造者模式可以有效的封装变化在使用建造者模式的场景中一般产品类和建造者类是比较稳定的因此将主要的业务逻辑封装在指挥者类中对整体而言可以取得比较好的稳定性。
在建造者模式中客户端不必知道产品内部组成的细节将产品本身与产品的创建过程解耦使得相同的创建过程可以创建不同的产品对象。
可以更加精细地控制产品的创建过程
。
将复杂产品的创建步骤分解在不同的方法中使得创建过程更加清晰也更方便使用程序来控制创建过程。
建造者模式很容易进行扩展。
如果有新的需求通过实现一个新的建造者类就可以完成基本上不用修改之前已经测试通过的代码因此也就不会对原有功能引入风险。
符合开闭原则。
建造者模式所创建的产品一般具有较多的共同点其组成部分相似如果产品之间的差异性很大则不适合使用建造者模式因此其使用范围受到一定的限制。
建造者Builder模式创建的是复杂对象其产品的各个部分经常面临着剧烈的变化但将它们组合在一起的算法却相对稳定所以它通常在以下场合使用。
创建的对象较复杂由多个部件构成各部件面临着复杂的变化但构件间的建造顺序是稳定的。
创建复杂对象的算法独立于该对象的组成部分以及它们的装配方式即产品的构建过程和最终的表示是独立的。
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback