欢迎访问 外汇EA下载与MT4/MT5自动交易资源 - 聚合外汇EA、黄金EA、量化交易工具与自动化交易实战内容。
登录 注册

编程模式 - Builder(经典) - MetaTrader 5 脚本

author emer | 545 人阅读 | 0 人评论 |

Programming Patters - Builder (classic) - script for MetaTrader 5

Programming Patters - Builder (classic) - script for MetaTrader 5

Programming Patters - Builder (classic) - script for MetaTrader 5

Programming Patters - Builder (classic) - script for MetaTrader 5

Programming Patters - Builder (classic) - script for MetaTrader 5

/****************************************************************************
                                                           MQL5 脚本
                                                版权所有 2019,DMIPEC
                                                      792112@gmail.com

经典的构建器编程模式
   该模式发表在《设计模式:元素》
   可重用的面向对象软件”,第一版,作者:Erich Gamma
   (作者), 理查德·赫尔姆 (Richard Helm) (作者), 拉尔夫·约翰逊 (Ralph Johnson) (作者), 约翰
   Vlissides(作者),Grady Booch(前言)。这些作者是
   统称为四人帮 (GoF)。

结构如图所示

意图
   将复杂对象的构造与其本身的结构分开
   表示,以便相同的构建过程可以创建
   不同的表示。

适用性
 * 创建复杂对象的算法应该是独立的
   组成物体的部件以及它们的组装方式。
 * 构建过程必须允许不同的表示
   构造的对象。

参加者
   建设者
    * 指定用于创建 Product 对象的各个部分的接口。
   混凝土建筑商
    * 通过实施来构造和组装产品的各个部分
      生成器界面。
    * 定义并跟踪它创建的表示。
    * 提供检索产品的接口。
   导演
    * 使用Builder接口构造一个对象;
   产品展示
    * 代表正在构建的复杂对象。混凝土
      Builder 构建产品的内部表示并定义
      它的组装过程。
    * 包括定义组成部分的类,包括
      用于将部件组装成最终结果的接口。

合作(见图)
 * 客户端创建Director对象并配置它
   所需的生成器对象。
   每当产品的一部分需要时,主管都会通知建筑商
   被建造。
 * Builder处理导演的请求并将零件添加到
   产品。
 * 客户端从构建器检索产品。

后果
   它可以让您改变产品的内部表示。
      Builder对象为导演提供了一个抽象
      用于构造产品的接口。该界面让
      构建器隐藏了表示和内部结构
      产品。它还隐藏了产品的组装方式。因为      该产品是通过抽象接口构建的,所有
      你必须改变产品的内部表示
      定义了一种新的构建器。
   它将构造和表示的代码隔离开来。
      Builder模式通过封装方式来提高模块化程度
      一个复杂的对象被构造和表示。客户不需要
      了解有关定义产品的类的任何信息
      内部结构;此类不会出现在 Builder 中
      界面。每个构建器包含所有要创建和构建的代码
      组装特定类型的产品。代码编写一次;
      然后不同的主管可以重用它来构建产品变体
      来自同一组零件。
   它使您可以更好地控制施工过程。
      与一次性构建产品的创造模式不同,
      Builder模式在下面一步步构建产品
      导演的控制。只有当产品完成后
      导演从建筑商那里取回它。因此,建造者
      界面更多地体现了构建产品的过程
      与其他创作模式相比。这可以让您更好地控制
      整个施工过程以及内部
      所得产品的结构。

实施
 * 通常有一个抽象 Builder 类,它定义了
   导演可能要求其创建的每个组件的操作。
   默认情况下,这些操作不执行任何操作。 ConcreteBuilder 类
   覆盖它有兴趣创建的组件的操作。
 * 以下是需要考虑的其他实施问题:
      装配和构造接口。
         构建者以逐步的方式构建他们的产品。
         因此Builder类的接口必须足够通用
         允许建造各种类型的产品
         混凝土建筑商。一个关键的设计问题涉及模型
         建造和组装过程。一个模型,其中
         施工请求的结果简单地附加到
         产品通常就足够了。但有时你可能需要
         访问之前构建的产品的各个部分。在那
         在这种情况下,构建器会将子节点返回给导向器,
         然后将它们传递回构建器来构建
         父节点。
      为什么没有产品的抽象类?
         在一般情况下,由混凝土生产的产品
         建造者的代表性差异如此之大,以至于
         为不同的产品提供共同的好处是没有什么好处的         父类。因为客户端通常会配置
         主管与适当的混凝土建筑商,客户在
         知道 Builder 的具体子类位于哪个位置
         使用并可以相应地处理其产品。
      Builder 中默认为空方法。
         在 C++ 中,构建方法故意不声明为纯的
         虚拟成员函数。它们被定义为空方法
         相反,让客户端仅覆盖他们正在执行的操作
         感兴趣。

代码输出
   施工正在进行中...
      A部分建成
      B部分建成
      C部分建成
   交付成品“真实产品”
   这个“真实产品”由以下材料制成:
      A部分
      B部分
      C部分
 */



附件下载

📎 c_builder.mq5 (24.69 KB)

Source: MQL5 #26799

🔐
请登录后参与评论
注册满12小时后评论,即可解锁附件下载
立即登录