代码之家  ›  专栏  ›  技术社区  ›  Paul Hadfield

这是哪种设计图案?

  •  6
  • Paul Hadfield  · 技术社区  · 15 年前

    在当前(c)项目中,我们有一个包含非接口连接对象的第三方程序集。使用IOC等,我们可以将这个具体的实例注入到我们的代码中,但这对单元测试等来说是一个噩梦。 MoQ 作为我们的模拟框架,理想情况下可以使用一个接口来完成工作,我们不想使用 Moles 因为我们希望将技术最小化。

    如果我们创建一个接口来模拟第三方连接对象的所需功能,然后创建一个包含第三方对象实例的接口的实现者,那么这将允许我们的代码在该接口上工作,并且我们的IOC和单元测试都会很高兴。然而,在一次讨论中,我们绕圈子讨论了它到底是哪种设计模式!

    所以问题是, 上述情况是否在下面的代码A中说明:

    1. Adapter 因为我们为现有功能提供了一个包装器。
    2. Proxy 因为我们正在为其他东西提供接口。
    3. Facade 因为作为过程的一部分,我们将为更大的对象提供一个简化的接口。

    namespace ExampleCode
    {
        public interface IConnector
        {
           void Open();
        }
    
        public class ConnectorWrapper : IConnector
        {
           ThirdPartyConnector _instance;
    
           public ConnectorWrapper(ThirdPartyConnector instance)
           {
              _instance = instance;
           }
    
           void Open()
           {
             _instance.Open();
           }
        }
    }
    
    2 回复  |  直到 15 年前
        1
  •  1
  •   ChaosPandion    15 年前

    这绝对是一个正面。我一直这样做是为了简化过度设计的API。

        2
  •  2
  •   Paul Rubel    15 年前

    快速回答,正面。

    从我 GoF

    Adapter:

    将类的接口转换为客户机期望的其他接口。适配器允许类一起工作,否则由于接口不兼容而无法一起工作。

    似乎不是因为互操作性的原因,这里说不。

    代理

    为另一个对象提供代理项或占位符,以控制对它的访问。

    也不好看,这不是访问问题。

    外观:

    为子系统中的一组接口提供统一的接口。Facade定义了一个更高级的接口,使子系统更容易使用。

    这看起来更像。您使用接口来抽象不同的实现、测试和应用程序。