Шаблон дизайна фасада предназначен для абстрагирования от деталей других реализаций класса. Если эти классы полностью закрыты, то обязательно. Мы можем использовать класс 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
, и этот класс является abstract
класс в своем собственном правильно. Это может быть примерно так:
public void doSomething()
{
AnimalAdapter.speak(new Dog());
}
Почему нет? Фасад - это в основном класс, который делегирует вызовы подсистеме. И этот класс может быть описан интерфейсом (или наследовать от абстрактного класса) –