Композиция против фасада - PullRequest
0 голосов
/ 01 июля 2018

Я нашел ответ, который заставил меня понять немного больше составления классов.

class Engine
{

}

class Automobile
{

}


class Car extends Automobile // car "is a" automobile //inheritance here
{ 
 Engine engine; // car "has a" engine //composition here

}

но разве это не образец фасада? Разве фасад не делает класс проще, разделив его на подклассы? В чем же разница между композицией и фасадом?

Или, может быть, я ошибаюсь. Фасад - это образец дизайна, но композиция больше похожа на хорошую практику. Можно ли сказать, что использование фасада - это создание композиции?

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

Шаблон фасада - это шаблон дизайна, используемый для изменения интерфейса, не соответствующего вашим текущим потребностям, на более полезный. Он полностью инкапсулирует другой интерфейс, не раскрывая его.

Некоторые примеры использования:

  • File.Copy () не может быть легко смоделирован в .NET, поэтому я пишу фасад, который делегирует ему виртуальный метод, поэтому я могу смоделировать этот фасад.
  • При использовании сторонней библиотеки вы можете не захотеть связывать типы с этой библиотекой, поэтому вы пишете фасад для инкапсуляции этих типов и открываете только ваши копии
  • Класс, который вы хотите использовать, может иметь огромное количество методов, но вам нужно только несколько. Фасад может быть написан поверх тех немногих, чтобы обеспечить более простой интерфейс.
  • У класса обслуживания может быть загадочное использование («передавайте -19438 в качестве второго аргумента, если вы хотите включить сглаживание»), для которого вам не нужны все опции в вашем коде. Создайте более простой в использовании Facade для этого класса, чтобы повысить удобочитаемость вашего основного кода.
0 голосов
/ 02 июля 2018

Композиция объединяет N других объектов в объекте с тем же API. Таким образом, вы можете вызывать один и тот же метод как для составного объекта, так и для его компонентов.

Фасад выглядит так, как будто он делает нечто очень похожее, но я думаю, что он снимает ограничение, когда составной объект должен соответствовать одному и тому же API. Весь смысл Facade в том, что API-интерфейсы оболочки и оболочки могут быть разными.

Пример, который вы показываете, не является формальным Composite или Facade, но если вы берете самое открытое определение Composite, то это может быть одно: «объект, в качестве членов которого используются другие объекты, над которыми он выполняет операции».

...