门面设计模式:转换客户端请求

Facade Design Pattern: Transforming client request

考虑以下设计,我怀疑我是否以正确的方式实现了 Facade 设计模式。我担心的是我操纵了来自客户的简单请求;而不是天真地将请求委托给封装类型:ComplexWorker。可以吗?这不就是Wrapper设计模式吗?

class WorkFacade
{
   public void Work(SimpleRequest simpleRequest)
   {
       ComplexRequest = new ComplexRequest(simpleRequest);
       ComplexRequest.RequestTime = DateTime.Now;
       ComplexRequest.UserId = 120;
       new ComplexWorker().Work(ComplexRequest, 2015, 6, 7, 23, 12, 1);
    }
}

class ComplexRequest
{
    ComplexRequest(SimpleRequest request)
    {
          // Code to convert simple request to complex request
          // understandable by ComplexRequest
    }
}

class ComplexWorker
{
   void Work(ComplexRequest request)
   {
      //...
   }
}

是的,您已经实现了外观模式。

无论谁使用您的 Façade,都可以享受不必熟悉子系统(在您的示例中为 ComplexRequest 和 ComplexWorker)的好处。这意味着您已经为客户端提供了一个高级且统一的接口。这就是 Façade 的意义所在。这样做是在利用 信息隐藏 原则。

Wrapper 模式,或者更广为人知的 - Adapter pattern,解决了另一个问题。它可以帮助您使不兼容的接口协同工作。它通常有助于使旧组件的阻抗匹配适应新系统。