门面设计模式与界面

时间:2013-12-06 14:31:42

标签: .net design-patterns architecture

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

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

2 个答案:

答案 0 :(得分:0)

外观设计模式旨在从其他类实现的细节中抽象出来。如果这些课程是完全自我封闭的,那么肯定。我们可以使用abstract类和static方法。

实施例

public abstract class Animal { }

public class Dog extends Animal
{
    public void bark() { };
}

public class Cat extends Animal
{
    public void meow() { };
}

public abstract class AnimalAdapter {
    public static void speak(Animal animal) {
       if(animal instanceof Dog) { 
          Dog dog = (Dog)animal;
          dog.bark();
       }
       else if(animal instanceof Cat) {
          Cat cat = (Cat)animal;
          cat.meow();
       }
    }
}

正如您所看到的,您创建了一个类AnimalAdapter,它从DogCat类的特定方法中抽象出来,此类是{{1}在它自己的权利。它的用法可能是这样的:

abstract

答案 1 :(得分:0)

这取决于您使用的架构。如果在TDD之后使用构造函数注入的纯SRP,则不建议使用答案,因为必须从构造函数中注入每个依赖项。如果在这种情况下需要外观,请使用抽象(或普通)工厂模式和Aggregate Services / Facade Service代替。

这是因为在纯TDDSRP中,不允许使用可变属性,因此接口中的附加属性会破坏设计。如:

public interface IFacade{
    IClass1 Class1{get;set;} // not allowed
    void DoFacade();
}

不允许。

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