Декоратор часто переводится как «украшение». Эти две сущности требуются в режиме декоратора.
Определение декоратора: Динамически добавляет дополнительные обязанности к объекту, например, покраска стены. Использование режима декоратора является более гибким, чем использование генерации подклассов для достижения функционального расширения.
Зачем использовать декоратор
Обычно мы можем использовать наследство для достижения расширения функций, если есть много типов функций, которые необходимо расширить, многие подклассы неизбежно будут генерировать для увеличения сложности системы. Необходимо предвидеть эти функции расширения.
Причина использования декоратора заключается в том, что эти функции должны быть динамически определяться пользователем для присоединения. Decorator предоставляет метод «плагин и воспроизведения», чтобы решить, когда добавить какие функции во время выполнения.
Как использовать декоративный режим
Возьмите пример вождения в адаптере. Вождение груды, такие как копание.
Давайте сначала создадим интерфейс:
Кода -копия выглядит следующим образом:
Работа с публичным интерфейсом {
public void insert ();
}
Интерфейсная работа имеет конкретную реализацию: вставьте квадратные кучи или круговые свай. Давайте возьмем вставку квадратной кучи в качестве примера:
Кода -копия выглядит следующим образом:
Общедоступный класс Squarepeg реализует работу {
public void insert () {
System.out.println ("квадратная вставка свай");
}
}
В настоящее время есть применение: до того, как куча будет привлекать, копает отверстие, и после того, как куча будет приведена, деревянная доска прибита на куче Может быть необходимо, чтобы прибить стойку после того, как куча будет двигаться (просто метафора).
Затем мы используем режим декоратора, где квадратный квадратный квадрат - это Decoratee (окрашенная краской), нам нужно нарисовать «краску» на Decoratee, и эти краски - эти дополнительные функции.
Кода -копия выглядит следующим образом:
Общедоступный декоратор внедряет работу {
частная работа;
// Дополнительная функциональность упакована в этом списке
Private ArrayList другие = new ArrayList ();
// Использование комбинированного нового метода в конструкторе, чтобы ввести рабочие объекты;
Public Decorator (Work Work) {
this.work = work;
Другие. Адд («копай дыру»);
Другие. Адд («Ногтевая доска»);
}
public void insert () {
newmethod ();
}
// В новом методе мы добавляем другие методы перед вставкой, порядок здесь гибко указан пользователем
public void newmethod () {
Другой method ();
work.insert ();
}
public void othermethod () {
ListITerator ListIterator = другие. Stistiterator ();
while (listicerator.hasnext ()) {
System.out.println (((string) (listiceTerator.next ())) + "в процессе");
}
}
}
В приведенном выше примере мы ранжировали как копающие отверстия, так и доски для гвоздей перед вставкой свай.
Хорошо, режим декоратора вышел, давайте посмотрим, как это назвать:
Кода -копия выглядит следующим образом:
Работа SquarePeg = new SquarePeg ();
Рабочий декоратор = новый декоратор (SquarePeg);
Decorator.insert ();
Режим декоратора завершен здесь.
Если вы осторожны, вы обнаружите, что приведенный выше вызов похож на звонок, который мы читаем, когда читаем файл:
Кода -копия выглядит следующим образом:
FileReader fr = new FileReader (имя файла);
BufferedReader BR = новый BufferedReader (FR);
Фактически, API ввода -вывода Java реализован с использованием декоратора.
Реализация декоратора в Jive
В системе форума некоторые специальные персонажи не могут появиться на форуме, например, «вниз с XXX», нам нужно отфильтровать эти «реакционные» шрифты. Не позволяйте им появиться и не показывать их в высокой яркости.
В статье, в котором конкретно рассказывается о Jive в колонке IBM Java, было упомянуто, что ForumMessagefilter.java в Jive использует режим декоратора. , тогда вы можете реорганизовать ForumeMessagefilter в качестве режима декоратора.
Поэтому, когда мы решаем, действительно ли это режим декоратора, и действительно будем использовать режим декоратора, мы должны понять определение режима декоратора и вовлеченных ролей (украшение и декоратор).