Лучшее руководство по декоратор в 2024 году. В этом руководстве вы можете изучить введение,реализация,
Decorator (декоратор) позволяет добавлять новые функции к существующему объекту без изменения его структуры. Этот тип шаблонов проектирования принадлежат структурной модели, она доступна в качестве класса-оболочки.
Этот шаблон создает декоративный, используемый, чтобы обернуть оригинальные методы класса и класса в поддержании целостности подписи под предпосылкой предоставления дополнительных функциональных возможностей.
Мы используем следующие примеры, чтобы продемонстрировать шаблон декоратора. Среди них, мы будем формировать украшение в разные цвета, без изменения формы класса.
Намерение: динамически к объекту , чтобы добавить некоторые дополнительные обязанности.Расширение функциональности, шаблон декоратора по сравнению подклассов более гибким.
Главным образом решить: В целом, мы часто используется , чтобы расширить класс наследования для достижения, в связи с введением статического особенностей наследования класса и расширенной функциональностью с увеличением, подкласс будет набухать.
Когда использовать: вы не хотите , увеличение в случае многих подкатегорий расширения классов.
Как решить: разделив конкретные функциональные обязанности, наследуя шаблон декоратора.
Код ключа: 1, компонентный класс выступает в качестве абстрактной роли, не должны конкретной реализации.2, а модифицированные ссылки класса и наследование классов компонентов, определенные классы расширений переопределить метод родительского класса.
Примеры применения: 1, Король обезьян 72 изменения , когда он становится "храмом", он просто был обезьяной, но у него есть функции храма.2, независимо от картинной рамки там можно повесить на стену, но, как правило, есть изображение кадра, и кадр был фактически висит на стене. Перед тем, висит на стене, картина может быть покрыт стеклом, крепится к раме дома, а затем покраска, стекло и рама выполнена из объекта.
Преимущества: декоративная отделка и могут быть разработаны независимо друг от друга, не связаны друг с другом, декоративного рисунка является альтернативным способом наследования, декоративные узоры могут динамически расширить класс , который реализует функцию.
Недостатки: более сложная многослойная декоративная.
Сценарии использования: 1, простирающиеся функцию класса.2, динамическая функциональность увеличение, динамическая отозвана.
Примечание: Вы можете заменить наследование.
Мы создадим интерфейсShapeи реализациюShapeинтерфейса классов сущностей. Затем мы создаем реализацию абстрактного декоративного интерфейсаShapeDecoratorShape и объектShapeв качестве переменных экземпляра.
RedShapeDecoratorявляется достижение классов сущностейShapeDecorator.
DecoratorPatternDemo,наши демонстрационные классы , использующиеRedShapeDecoratorукрасить объектShape.
Создайте интерфейс.
Shape.java
Открытый интерфейс Shape { недействительным ничья (); }
Создать класс сущностей, который реализует интерфейс.
Rectangle.java
Открытый класс Прямоугольник реализует Shape { @Override общественного недействительными ничья () { System.out.println ( "Форма: Прямоугольник"); } }
Circle.java
Открытый класс Circle реализует Shape { @Override общественного недействительными ничья () { System.out.println ( "Форма: Круг"); } }
Создание достижения абстрактные декоративные интерфейсShape.
ShapeDecorator.java
общественного абстрактного класса ShapeDecorator реализует Shape { Форма decoratedShape защищенной; общественного ShapeDecorator (Shape decoratedShape) { this.decoratedShape = decoratedShape; } общественного недействительными ничья () { decoratedShape.draw (); } }
Создание расширенного лица декоративный классShapeDecorator.
RedShapeDecorator.java
Открытый класс RedShapeDecorator расширяет ShapeDecorator { общественного RedShapeDecorator (Shape decoratedShape) { супер (decoratedShape); } @Override общественного недействительными ничья () { decoratedShape.draw (); setRedBorder (decoratedShape); } частная пустота setRedBorder (Shape decoratedShape) { System.out.println ( "Цвет рамки: Красный"); } }
RedShapeDecoratorиспользовать для украшения объектShape.
DecoratorPatternDemo.java
Открытый класс DecoratorPatternDemo { государственной статической силы основных (String []) {агдз Форма круга = новый круг (); Форма redCircle = новый RedShapeDecorator (новый круг ()); Форма redRectangle = новый RedShapeDecorator (новый прямоугольник ()); System.out.println ( "Круг с нормальной границы»); circle.draw (); System.out.println ( "\ nCircle красной границы"); redCircle.draw (); System.out.println ( "\ nRectangle красной границы"); redRectangle.draw (); } }
Проверьте выход.
Круг с нормальной границей Форма: Круг Круг красной границы Форма: Круг Цвет рамки: Красный Прямоугольник красной границы Форма: Прямоугольник Цвет рамки: Красный