Узор декоратора может динамически добавить дополнительные обязанности объекту. С точки зрения добавления функций режим декоратора более гибкий, чем генерирование подклассов.
Применимая среда для этого режима:
(1) Добавьте обязанности в один объект динамическим и прозрачным образом, не влияя на другие объекты.
(2) обрабатывать те обязанности, которые можно отозвать.
(3) Когда метод генерации подклассов не может быть использован для расширения. Одним из сценариев является то, что может быть большое количество независимых расширений, которые будут создавать большое количество подклассов для поддержки каждой комбинации, что приведет к взрыву количества подклассов. Другой случай может быть связан с тем, что определение класса скрыто, или определение класса не может быть использовано для генерации подклассов.
Ключевые шаги для реализации этого режима:
(1) компонент (базовый класс украшенного объекта): определяет интерфейс объекта, который может динамически добавлять обязанности к этим объектам;
(2) Concretecomponent (конкретный декоративный объект): определяет определенный объект, и декоратор может добавить к нему дополнительные обязанности;
(3) декоратор (класс абстрактного декоратора): поддерживает ссылку на экземпляр компонента и определяет интерфейс, согласующийся с компонентом ( то есть для наследования или реализации базового класса украшенного объекта );
(4) Concretedecorator: конкретный декоративный объект, добавляя конкретные обязанности к конкретным декоративным объектам, удерживаемым внутри;
Это может быть немного сложно для всех, чтобы понять, поэтому мы все еще тихи:
После зимы погода стала холоднее и холоднее. После того, как уйти с работы, как ветеран гурмана, было бы здорово назначить встречу с двумя или тремя друзьями, чтобы провести горячий горшок. Говоря о горячем горшке, я должен упомянуть горячий горшок Dalong, который я ел в Чэнду, с всевозможными дном и гарнирами, но моя любимая - это оригинальное дно горшки горячего горшка Dalong, пряная говядина, рубашка Dadao, колбаса Tianwei, говядина Tuotuo, пряные свиные ребрышки и т. Д. Я могу опуститься, когда я думаю об этом.
Когда дело доходит до этого, вы должны немного почувствовать об этом. Упомянутое выше дно горшок на самом деле является основой декоративного объекта . Ингредиенты на самом деле являются декоративным абстрактным объектом . Конкретные дниты горшка из оригинального кастрюля Dalong Hot Pot Bottom являются конкретные декоративные объекты. Различные гарниры, используемые для украшения дна горшка, являются конкретными декоративными объектами . Говоря об этом, каждый должен был вдруг это осознать. Давайте начнем конкретную реализацию кода:
Шаг 1: Определите базовый класс украшенного объекта (может быть абстрактным классом или интерфейсом)
Публичный интерфейс GOODI {public float stost (); // Конечно, дно горшок должен быть оценен в общедоступном названии строки (); // Также должно быть доступно имя} Шаг 2: Определите конкретный декоративный объект (то есть различные дниты горшка, два здесь определены)
открытый класс Yuanyang реализует Guodi {@Override public stost () {return 48.0f; } @Override public string name () {return "Double Pot Base"; }} открытый класс Dalongyan реализует GOODI {@Override public float stost () {return 59.0f; } @Override public String name () {return "Dalong Hot Pot Original Pot Base"; }}Шаг 3: Определите класс абстрактного декоратора
Общественный абстрактный класс Peicai реализует Guodi {Private Guodi Goodi; Public FoodDecorator (GOODI GOODI) {Super (); this.guodi = guodi; } @Override public stost () {return goodi.cost (); } @Override public String name () {return goodi.name (); }}Шаг 4: Определите конкретный объект декоратора
открытый класс Malaniurou Extends Peicai {public malaniurou (goodi goodi) {super (goodi); } @Override public float stost () {return super.cost ()+46f; } @Override public String name () {return super.name ()+"+Spicy Beef"; }} public Class Maodu расширяет Peicai {public Maodu (Goodi Goodi) {super (goodi); } @Override public float stost () {return super.cost ()+30f; } @Override public String name () {return super.name ()+"+Большой нож рубец"; }}Тестовый класс:
Общедоступный тест класса {public static void main (string [] args) {goodi goodi = new dalongyan (); // Заказывать Dalong Hot Pot Original Pot Bottom Malaniurou y = new Malaniurou (goodi); // Получить пряную говядину маодус x = new Maodu (y); // корректировать трюк с большим ножом. потреблять "+s.cost ()); }}Результат вывода:
1. Всего было заказано DALONG HOTPOT BOTTION + PICY BEUT + DADAO TRIPE, а в общей сложности было употреблено 135
Выше приведено модель Java Decorator, представленная вам редактором (понимание принципа кода с точки зрения реальной жизни). Я надеюсь, что это будет полезно для всех. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит всем вовремя. Большое спасибо за вашу поддержку сайту wulin.com!