我们可以使用抽象类或接口创建外观设计模式吗?
Somone让我思考如何使用抽象类或接口实现外观设计模式。我不认为我们可以通过抽象类或接口实现这一点。
答案 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
,它从Dog
和Cat
类的特定方法中抽象出来,此类是{{1}在它自己的权利。它的用法可能是这样的:
abstract
答案 1 :(得分:0)
这取决于您使用的架构。如果在TDD
之后使用构造函数注入的纯SRP
,则不建议使用答案,因为必须从构造函数中注入每个依赖项。如果在这种情况下需要外观,请使用抽象(或普通)工厂模式和Aggregate Services / Facade Service
代替。
这是因为在纯TDD
和SRP
中,不允许使用可变属性,因此接口中的附加属性会破坏设计。如:
public interface IFacade{
IClass1 Class1{get;set;} // not allowed
void DoFacade();
}
不允许。
但是,如果不遵循它,则可以允许接口级别的可变依赖项。