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

编程模式 - Facade - MetaTrader 5 库

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

Programming patterns - Facade - library for MetaTrader 5

Programming patterns - Facade - library for MetaTrader 5

/********************************************************************
编程模式 - Facade 
为子系统中的一组接口提供统一的接口。外观定义了更高的
使子系统更易于使用的级别接口。
/**/


Programming patterns - Facade - library for MetaTrader 5

/********************************************************************/
班级子系统A {民众空白操作A() {打印“子系统A”);}};/**/
班级子系统B {民众空白操作B() {打印“子系统B”);}};/**/
班级子系统C {民众空白操作C() {打印“子系统C”);}};/********************************************************************/
班级门面
  {民众:
  空白              操作AB() {subSystemA.OperationA(); subSystemB.OperationB();}
  空白              OperationBC() {subSystemB.OperationB(); subSystemC.OperationC();}受保护的:
   子系统A        子系统A;
   子系统B        子系统B;
   子系统C        子系统C;
  };


/********************************************************************
适用性
   使用 Facade 模式时
      *您想为复杂的子系统提供一个简单的接口。子系统
       随着它们的发展,它们往往会变得更加复杂。大多数模式在应用时都会导致
       更多和更小的班级。这使得子系统更具可重用性并且更容易
       定制,但对于不需要的客户来说也变得更难使用
       定制它。外观可以提供子系统的简单默认视图
       对于大多数客户来说已经足够好了。只有需要更多可定制性的客户才会
       需要超越表面。
      *客户端和实现类之间有很多依赖关系
       一个抽象。引入外观来将子系统与客户端解耦
       其他子系统,从而促进子系统的独立性和可移植性。
      *您想要对子系统进行分层。使用外观来定义每个的入口点
       子系统级别。如果子系统是相关的,那么您可以简化
       通过使它们相互通信来实现它们之间的依赖关系
       仅通过他们的外墙。
参加者
   *外墙 
      *知道哪些子系统类负责请求。
      *将客户端请求委托给适当的子系统对象。
   *子系统类 
      *实现子系统功能。
      *处理Facade对象分配的工作。
      *对门面一无所知;也就是说,他们没有保留任何引用。
合作
   *客户端通过向Facade发送请求与子系统进行通信,Facade
    将它们转发到适当的子系统对象。虽然子系统
    对象执行实际工作,外观可能必须自己完成工作
    将其接口转换为子系统接口。
   *使用外观的客户端不必直接访问其子系统对象。
后果
   Facade 模式具有以下优点:
      1.它将客户端与子系统组件屏蔽开来,从而减少了子系统组件的数量
       客户端处理的对象并使子系统更易于使用。
      2.它促进了子系统与其客户端之间的弱耦合。 
         子系统中的组件通常是强耦合的。弱耦合让你可以有所不同
          子系统的组件而不影响其客户端。 Facades 帮助层
          系统和对象之间的依赖关系。他们可以消除复杂或
          循环依赖。当客户
          各子系统独立实现。
         减少编译依赖性对于大型软件系统至关重要。你想要
          当子系统类发生变化时,通过最小化重新编译来节省时间。         减少与外观的编译依赖关系可以限制重新编译
          需要对重要子系统进行小的更改。立面也可以简化
          将系统移植到其他平台,因为构建一个系统的可能性较小
          子系统需要构建所有其他子系统。
      3. 它不会阻止应用程序在需要时使用子系统类。
         因此,您可以在易用性和通用性之间进行选择。
相关模式
   *Abstract Factory可以与Facade结合使用,提供创建的接口
    子系统对象以独立于子系统的方式。也可以使用抽象工厂
    作为 Facade 的替代方案来隐藏特定于平台的类。
   *Mediator 与 Facade 类似,它抽象了现有类的功能。
    然而,Mediator 的目的是抽象同事之间的任意通信
    对象,通常集中不属于其中任何一个对象的功能。一个
    调解员的同事了解并与调解员沟通,而不是
    彼此直接沟通。相比之下,立面仅仅抽象了
    子系统对象的接口,使它们更易于使用;它没有定义新的
    功能,而子系统类不知道它。
    通常只需要一个 Facade 对象。因此 Facade 对象通常是 Singletons
/**/


/********************************************************************
Facade 模式的使用示例。客户。
/********************************************************************/
空白 启动时()
  {
   立面立面;
   门面.OperationAB();
     {细绳s;为了整数我=0;我<11; i++) {s+=“-”;}打印(s);}
   门面.OperationBC();
  }/********************************************************************
输出:
   子系统A
   子系统B
   ------------
   子系统B
   子系统C
/**/



附件下载

📎 facade.mq5 (0.54 KB)

📎 facade.mqh (10.21 KB)

Source: MQL5 #29802

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