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

JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙
文章图片
设计模式-构建器模式
JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙
download:https://www.zxit666.com/1446/
我们生活中的物体 , 如汽车 , 是车轮、车架、发动机等的组合 。, 但是经常用的人 , 只想要一辆车 , 不想知道造车的过程 。 这时 , 他们可以使用构建器模式 。
在软件开发中 , 也有大量像汽车这样的复杂对象 , 它们有一系列的成员属性 , 其中一些是引用类型成员对象 。 而且 , 在这些复杂的对象中 , 可能会有一些限制 , 例如 , 如果某些属性没有被赋值 , 复杂的对象就不能作为一个完整的产品使用;有些属性必须按一定的顺序分配 。 在分配一个属性之前 , 不能分配另一个属性 。
对象的复杂程度相当于一辆要造的汽车 , 而对象的属性相当于汽车的部件 。 构建产品的过程相当于组装组件的过程 。 因为组装组件的过程非常复杂 , 所以这些组件的组装过程往往被“外化”成一个叫做builder的对象 。 构建器向客户端返回一个已经构建好的完整的产品对象 , 用户不需要关心对象中包含的属性以及它们的组装方法 。 这就是builder模式的模式动机 。
构建器模式的定义
构建器模式是一种创造性的模式 , 它将复杂对象的构建过程与其表示分离开来 , 以便同一构建过程可以创建不同的表示 。 使用构建器模式 , 用户只需要指定要构建的类型就可以得到对象 , 构建过程和细节不需要知道 。
看看传统构建器模式的UML类图:
JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙
文章图片
有四个主要角色:
产品:要创建的产品类对象
Builder:构建器的抽象类 , 它规定了产品对象各部分的构造 。 一般子类实现具体的构造过程 。
ConcreteBuilder:一个具体的构建器类 , 它体现了根据不同的业务逻辑创建一个对象的各个组件 。
指导者:调用特定的构建者来创建对象的每个部分 。 导演不涉及具体产品的信息 , 只负责保证对象的各个部分都是按照一定的顺序创作或创造出来的 。
传统模式代码示例
以肯德基的套餐为例 。 肯德基有很多套餐 , 肯德基服务员需要根据用户的要求提供相应的套餐 。
适应你自己的项目需求 。
生成器模式在源代码中的使用
这里有一个StringBuilder的例子 。
这种情况非常适合builder模式 , 因为在拼接字符串中需要大量的处理来提高性能 , 而且每次在外面使用都不方便调用这么多代码 。
builder模式的应用场景
所需的产品对象具有复杂的内部结构 , 这些产品对象通常包含多个成员属性 。
当有三种、四种或更多种方法来构造对象时 , 您可以使用构建器模式 。
JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙】初始化一个对象的时候特别复杂 , 参数很多 , 很多参数都有默认值 。
构建器模式的优点和缺点:
优势:
在builder模式下 , 客户不必知道产品的内部构成细节 。
良好的封装 , 创建和使用的隔离
扩展性好 , 构造类直接独立 , 一定程度上解耦 。
缺点:
生成冗余的构造类 。
当产品内部发生变化时 , 构建者要进行修改 , 违背了开放封闭原则 , 修改成本很大 。
构建器模式和工厂模式的区别
JavaScript玩转机器学习-Tensorflow.js项目实战车如流水马如龙
文章图片
构建器模式更注重方法的调用顺序 , 工厂模式更注重对象的创建 。