首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙

设计模式-构建器模式

JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙

download:https://www.zxit666.com/1446/

我们生活中的物体,如汽车,是车轮、车架、发动机等的组合。,但是经常用的人,只想要一辆车,不想知道造车的过程。这时,他们可以使用构建器模式。

在软件开发中,也有大量像汽车这样的复杂对象,它们有一系列的成员属性,其中一些是引用类型成员对象。而且,在这些复杂的对象中,可能会有一些限制,例如,如果某些属性没有被赋值,复杂的对象就不能作为一个完整的产品使用;有些属性必须按一定的顺序分配。在分配一个属性之前,不能分配另一个属性。

对象的复杂程度相当于一辆要造的汽车,而对象的属性相当于汽车的部件。构建产品的过程相当于组装组件的过程。因为组装组件的过程非常复杂,所以这些组件的组装过程往往被“外化”成一个叫做builder的对象。构建器向客户端返回一个已经构建好的完整的产品对象,用户不需要关心对象中包含的属性以及它们的组装方法。这就是builder模式的模式动机。

构建器模式的定义

构建器模式是一种创造性的模式,它将复杂对象的构建过程与其表示分离开来,以便同一构建过程可以创建不同的表示。使用构建器模式,用户只需要指定要构建的类型就可以得到对象,构建过程和细节不需要知道。

看看传统构建器模式的UML类图:

有四个主要角色:

产品:要创建的产品类对象

Builder:构建器的抽象类,它规定了产品对象各部分的构造。一般子类实现具体的构造过程。

ConcreteBuilder:一个具体的构建器类,它体现了根据不同的业务逻辑创建一个对象的各个组件。

指导者:调用特定的构建者来创建对象的每个部分。导演不涉及具体产品的信息,只负责保证对象的各个部分都是按照一定的顺序创作或创造出来的。

传统模式代码示例

以肯德基的套餐为例。肯德基有很多套餐,肯德基服务员需要根据用户的要求提供相应的套餐。

适应你自己的项目需求。

生成器模式在源代码中的使用

这里有一个StringBuilder的例子。

这种情况非常适合builder模式,因为在拼接字符串中需要大量的处理来提高性能,而且每次在外面使用都不方便调用这么多代码。

builder模式的应用场景

所需的产品对象具有复杂的内部结构,这些产品对象通常包含多个成员属性。

当有三种、四种或更多种方法来构造对象时,您可以使用构建器模式。

初始化一个对象的时候特别复杂,参数很多,很多参数都有默认值。

构建器模式的优点和缺点:

优势:

在builder模式下,客户不必知道产品的内部构成细节。

良好的封装,创建和使用的隔离

扩展性好,构造类直接独立,一定程度上解耦。

缺点:

生成冗余的构造类。

当产品内部发生变化时,构建者要进行修改,违背了开放封闭原则,修改成本很大。

构建器模式和工厂模式的区别

构建器模式更注重方法的调用顺序,工厂模式更注重对象的创建。

创造对象的力度不一样。构建器模式创建由各种复杂组件组成的复杂对象。工程模式创建的所有对象都是一样的。(这里可能有人会奇怪为什么是一样的,因为我们可以给构建器模式对象的一些属性赋值,有些没有自然对象是不一样的。工厂模式不一样,只有一种创建方式,要么所有属性都有,要么一个都没有,所以是一样的)

关注的维度不同。工厂只关注对象的创建。构建者不仅要创建它,还要知道这个对象是由哪些组件构成的。

构建器模式根据构建过程中的顺序不同,最终的对象组件组成也可能不同(那些与调用顺序无关的类可能是一样的)。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20221113A0018Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券