门面设计模式:转换客户端请求
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,解决了另一个问题。它可以帮助您使不兼容的接口协同工作。它通常有助于使旧组件的阻抗匹配适应新系统。
考虑以下设计,我怀疑我是否以正确的方式实现了 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,解决了另一个问题。它可以帮助您使不兼容的接口协同工作。它通常有助于使旧组件的阻抗匹配适应新系统。