Определение:
Абстракции и разделение, так что они могут быть изменены независимо друг от друга. Это достигается за счет комбинации отношений вместо наследования и абстракции реализованы , чтобы уменьшить размеры двух переменных степени сцепления.
Роль:
абстракция (Абстракция) роль: определение абстрактного класса и содержит ссылку на реализацию объекта.
Автореф (рафинированная) Абстракция роли: роль абстракции является подклассом, реализовать бизнес - методу в родительском классе, и с помощью комбинации методов для достижения деловых отношений , призывающих роль.
Реализация (реализатор) роли: определение роли реализации интерфейса для расширенного абстрактного вызова ролей.
Конкретная реализация (Concrete Implementor) роль: добиться отводилась роль конкретной реализации интерфейса.
Например:
Автомобиль разделен на множество (автомобили, автобусы), и каждый автомобиль будет работать на разных дорогах (улицы, шоссейные дороги), если вы используете наследования , как мы можем достичь этих сценариев ,
но что сделать это будет сделать код становится масштабируемая линия плохая, но это не режим моста же использование
абстрактный класс Дорога { общественный $ автомобиля ; общественная функция __construct (Car $ автомобиля ) { $ это -> автомобиль = $ автомобиль ; } Общественных абстрактные функции запуска (); } Класс Speedway расширяет дорогу { общественная функция Run () { эхо это $ -> автомобиль-> имя "работает на Speedway \ п". ; } } Класс Street простирается дорога { общественных функций Run () { Эхо этого $ -> автомобиль-> имя «работать на улице \ п». ; } } Абстрактный класс автомобилей { общественности $ имя ; } Класс SmallCar распространяется автомобилей { общественности функция __construct () { $ это -> имя = "SmallCar" ; } } Класс Bus расширяет Car { общественная функция __construct () { $ это -> имя = "Bus" ; } } $ Small_car = новый SmallCar (); $ Speedway = новый Speedway ( $ small_car ); $ Speedway -> Run (); $ автобус = новый автобус (); $ Street = новая улица ( $ автобус ); $ Street -> Run ();
Сценарии использования:
При наличии двух независимых размерностей изменении класса, и эти два аспекта должны быть расширены.
Когда система не хочет использовать наследование или наследование многоуровневого привело к резкому увеличению числа системных классов.
Когда система должна добавить больше гибкости между абстрактным и конкретным членом роли роли.