.net 带界面的立面设计模式

.net 带界面的立面设计模式,.net,design-patterns,architecture,.net,Design Patterns,Architecture,我们可以使用抽象类或接口创建外观设计模式吗 Somone让我思考如何使用抽象类或接口实现facade设计模式。我认为我们不能通过抽象类或接口来实现这一点。facade设计模式旨在抽象其他类实现的细节。如果这些类是完全自封闭的,那么请确定。我们可以将抽象类与静态方法一起使用 范例 如您所见,您已经创建了一个类AnimalAdapter,它从Dog和Cat类的特定方法中抽象出来,而这个类本身就是一个抽象类。它的用法可能是这样的: public void doSomething() { An

我们可以使用抽象类或接口创建外观设计模式吗


Somone让我思考如何使用抽象类或接口实现facade设计模式。我认为我们不能通过抽象类或接口来实现这一点。

facade设计模式旨在抽象其他类实现的细节。如果这些类是完全自封闭的,那么请确定。我们可以将
抽象
类与
静态
方法一起使用

范例

如您所见,您已经创建了一个类
AnimalAdapter
,它从
Dog
Cat
类的特定方法中抽象出来,而这个类本身就是一个
抽象
类。它的用法可能是这样的:

public void doSomething()
{
     AnimalAdapter.speak(new Dog());
}

这取决于您使用的体系结构。如果在构造函数注入中使用纯
TDD
跟随
SRP
,则不建议使用此答案,因为每个依赖项都必须从构造函数注入。如果您在这种情况下需要facade,请使用抽象(或普通)工厂模式,而不是

这是因为在纯
TDD
SRP
中,不允许可变属性,因此接口中的附加属性破坏了设计。例如:

public interface IFacade{
    IClass1 Class1{get;set;} // not allowed
    void DoFacade();
}
这是不允许的


但是,如果不遵循它,则可以允许接口级别的可变依赖关系。

为什么不?facade基本上是一个类,它将调用委托给子系统。这个类可以由接口描述(或者从抽象类继承)
public interface IFacade{
    IClass1 Class1{get;set;} // not allowed
    void DoFacade();
}