编程模式 - Builder(经典) - 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小时后评论,即可解锁附件下载
立即登录
