другой шаблон дизайна для этого решения - PullRequest
1 голос
/ 11 января 2020

У меня есть интерфейс, который содержит три различных метода. И есть два класса Car и Plane, которые будут реализовывать интерфейс Vehicle, чтобы получить доступ к этим методам. У меня есть два вопроса:

1. Какой тип шаблона проектирования удовлетворяет следующей реализации?

2. Есть ли какой-либо другой шаблон проектирования для удовлетворения аналогичных видов функциональных возможностей?

Хотя Я пробовал некоторые блоги и вопросы, я нашел один ответ относительно второго вопроса, который использует Anonymous Class но это приводит к большему количеству мусорного кода. Так есть ли решение или ответ на мои вопросы?

public interface Vehicle {
    int set_num_of_wheels();
    int set_num_of_passengers();
    boolean has_gas();
}
public class Car implements Vehicle{

    @Override
    public int set_num_of_wheels() {
        return 0;
    }

    @Override
    public int set_num_of_passengers() {
        return 0;
    }

    @Override
    public boolean has_gas() {
        return true;
    }

}

public class Plane implements Vehicle{

    @Override
    public int set_num_of_wheels() {
        return 0;
    }

    @Override
    public int set_num_of_passengers() {
        return 0;
    }

    @Override
    public boolean has_gas() {
        return true;
    }

}

1 Ответ

1 голос
/ 12 января 2020

Полиморфизм - это просто причудливый способ поместить разные указатели на функции (выбранные конкретным классом безоговорочно) под заданным именем функции.

Таким образом, вместо этого, если у вас был один класс с хэш-таблицей метода метадена к somefunctioninterface (метод enum просто перечислит конечный набор методов для подключения), затем вы можете вызвать функции polymorphi c, отыскивая их по enum на карте, затем приводя к somefunctioninterface и вызывая его.

Это полностью противоречит цели этого OOP языка, но это будет отличная реализация.

Это наверняка попадет в поведенческие паттерны, но я думаю, что это будет близко к Стратегии или Плагину, учитывая речь идет о делегировании классам, воплощающим функцию.

Кстати, это почти то, что пытается сделать DynamicProxy; прокси интерфейс без какого-либо класса impl и делегирование обработчику, который определяет способ ответа на запрошенный метод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...