这是哪种设计模式?

时间:2010-09-08 13:09:47

标签: design-patterns oop

在当前(C#)项目中,我们有一个包含非接口连接对象的第三方程序集。使用IoC等我们可以将这个具体的实例注入到我们的代码中,但它证明了单元测试等的噩梦。我们使用MoQ作为我们的模拟框架,所以理想情况下可以使用接口来解决问题不想沿着Moles之类的路线前进,因为我们希望尽量减少技术。

如果我们创建一个界面来模仿第三方连接对象的所需功能,然后创建包含第三方对象实例的该接口的实现者,那么这将允许我们的代码处理接口以及我们的Io​​C和单元测试会很开心。然而,在讨论中,我们已经围绕它确实是哪种设计模式!

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

  1. Adapter ,因为我们正在为现有功能提供包装。
  2. Proxy ,因为我们正在提供其他内容的接口。
  3. Facade 因为作为流程的一部分,我们将为更大的对象提供简化的界面。
  4. namespace ExampleCode
    {
        public interface IConnector
        {
           void Open();
        }
    
        public class ConnectorWrapper : IConnector
        {
           ThirdPartyConnector _instance;
    
           public ConnectorWrapper(ThirdPartyConnector instance)
           {
              _instance = instance;
           }
    
           void Open()
           {
             _instance.Open();
           }
        }
    }
    

2 个答案:

答案 0 :(得分:2)

快速回答,门面。

来自我的GoF

适配器:

  

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

似乎没有出于互操作性原因,在这里说不。

代理

  

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

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

门面:

  

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

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

答案 1 :(得分:1)

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