Latest web development tutorials

декоратор

Decorator (декоратор) позволяет добавлять новые функции к существующему объекту без изменения его структуры. Этот тип шаблонов проектирования принадлежат структурной модели, она доступна в качестве класса-оболочки.

Этот шаблон создает декоративный, используемый, чтобы обернуть оригинальные методы класса и класса в поддержании целостности подписи под предпосылкой предоставления дополнительных функциональных возможностей.

Мы используем следующие примеры, чтобы продемонстрировать шаблон декоратора. Среди них, мы будем формировать украшение в разные цвета, без изменения формы класса.

введение

Намерение: динамически к объекту , чтобы добавить некоторые дополнительные обязанности.Расширение функциональности, шаблон декоратора по сравнению подклассов более гибким.

Главным образом решить: В целом, мы часто используется , чтобы расширить класс наследования для достижения, в связи с введением статического особенностей наследования класса и расширенной функциональностью с увеличением, подкласс будет набухать.

Когда использовать: вы не хотите , увеличение в случае многих подкатегорий расширения классов.

Как решить: разделив конкретные функциональные обязанности, наследуя шаблон декоратора.

Код ключа: 1, компонентный класс выступает в качестве абстрактной роли, не должны конкретной реализации.2, а модифицированные ссылки класса и наследование классов компонентов, определенные классы расширений переопределить метод родительского класса.

Примеры применения: 1, Король обезьян 72 изменения , когда он становится "храмом", он просто был обезьяной, но у него есть функции храма.2, независимо от картинной рамки там можно повесить на стену, но, как правило, есть изображение кадра, и кадр был фактически висит на стене. Перед тем, висит на стене, картина может быть покрыт стеклом, крепится к раме дома, а затем покраска, стекло и рама выполнена из объекта.

Преимущества: декоративная отделка и могут быть разработаны независимо друг от друга, не связаны друг с другом, декоративного рисунка является альтернативным способом наследования, декоративные узоры могут динамически расширить класс , который реализует функцию.

Недостатки: более сложная многослойная декоративная.

Сценарии использования: 1, простирающиеся функцию класса.2, динамическая функциональность увеличение, динамическая отозвана.

Примечание: Вы можете заменить наследование.

реализация

Мы создадим интерфейсShapeи реализациюShapeинтерфейса классов сущностей. Затем мы создаем реализацию абстрактного декоративного интерфейсаShapeDecoratorShape и объектShapeв качестве переменных экземпляра.

RedShapeDecoratorявляется достижение классов сущностейShapeDecorator.

DecoratorPatternDemo,наши демонстрационные классы , использующиеRedShapeDecoratorукрасить объектShape.

Декоратор UML диаграмма

Шаг 1

Создайте интерфейс.

Shape.java

Открытый интерфейс Shape {
   недействительным ничья ();
}

Шаг 2

Создать класс сущностей, который реализует интерфейс.

Rectangle.java

Открытый класс Прямоугольник реализует Shape {

   @Override
   общественного недействительными ничья () {
      System.out.println ( "Форма: Прямоугольник");
   }
}

Circle.java

Открытый класс Circle реализует Shape {

   @Override
   общественного недействительными ничья () {
      System.out.println ( "Форма: Круг");
   }
}

Шаг 3

Создание достижения абстрактные декоративные интерфейсShape.

ShapeDecorator.java

общественного абстрактного класса ShapeDecorator реализует Shape {
   Форма decoratedShape защищенной;

   общественного ShapeDecorator (Shape decoratedShape) {
      this.decoratedShape = decoratedShape;
   }

   общественного недействительными ничья () {
      decoratedShape.draw ();
   }	
}

Шаг 4

Создание расширенного лица декоративный классShapeDecorator.

RedShapeDecorator.java

Открытый класс RedShapeDecorator расширяет ShapeDecorator {

   общественного RedShapeDecorator (Shape decoratedShape) {
      супер (decoratedShape);		
   }

   @Override
   общественного недействительными ничья () {
      decoratedShape.draw ();	       
      setRedBorder (decoratedShape);
   }

   частная пустота setRedBorder (Shape decoratedShape) {
      System.out.println ( "Цвет рамки: Красный");
   }
}

Шаг 5

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 ();
   }
}

Шаг 6

Проверьте выход.

Круг с нормальной границей
Форма: Круг

Круг красной границы
Форма: Круг
Цвет рамки: Красный

Прямоугольник красной границы
Форма: Прямоугольник
Цвет рамки: Красный