Как называется эта концепция ООП? - PullRequest
0 голосов
/ 30 января 2011

Может ли кто-нибудь дать мне название следующей концепции ООП (если она действительно есть, концепция ООП вообще!):

У меня есть два класса: A и B. Оба говорят, по 2 метода каждый (все разные). Теперь я создаю третий класс C. Теперь я хочу представить все методы A & B для C. Вот некоторая демонстрация:

class A
    int method_in_A_one() {
    }

    int method_in_A_two() {
    }
end

class B
    int method_in_B_one() {
    }

    int method_in_B_two() {
    }
end

class C
    C() {
        A an_instance_of_a;
        B an_instance_of_b;
    }
}

Now I want to be able to do this:

C instance_of_c = new C;

insance_of_c.method_in_A_one();
insance_of_c.method_in_A_two();
insance_of_c.method_in_B_one();
insance_of_c.method_in_B_two();

У меня пока нет смысла в этом, но я уверен, что есть конкретная концепция, имеющая к этому отношение. Заранее спасибо, эл.

Ответы [ 3 ]

3 голосов
/ 30 января 2011

Итак, здесь происходит несколько вещей. Ваш тип C был создан составом типов A и B, который является распространенной альтернативой подклассам.

Если цель C состоит в том, чтобы предоставить более простой интерфейс для работы с A и B, то это будет пример шаблона фасад .

Если C предоставляет дополнительные функциональные возможности своим обернутым объектам (скажем, выполняя свою реализацию method_in_A_one, выполняет некоторую дополнительную работу перед вызовом его для обернутого объекта), это будет примером шаблона decorator .

Если C переводит понятия в A / B в форму, ожидаемую другой библиотекой (пример: перенос C ++ std :: map в подкласс NSDictionary для использования в Какао), это будет шаблон adapter .

3 голосов
/ 30 января 2011

Это примерно состав объекта и делегирование :

  • состав объекта - это когда ваш класс составлен другими классами (в примере - C состоит из A и B)
  • делегирование - это когда в классе-владельце существует метод, который делегирует методам составляющих классов

На языках, которые я знаю, делегирование выполняется вручную - вы должны объявить метод в C и вызвать соответствующий метод базового объекта.

Обратите внимание, что есть другой вариант для достижения этого - множественное наследование, хотя ваш пример делаетне показывать именно это.Это означает, что C является одновременно A и B.Однако некоторые языки запрещают это, и в любом случае составление объекта считается лучшей практикой.

0 голосов
/ 30 января 2011

Походит на множественное наследование или общий интерфейс. Но не совсем так, как вы инкапсулируете и A, и B в C, не выставляя ни как базовый класс.

...