.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();
}