Как проверить, существует ли строка в файле с Bash?

Шаблон "декоратор" используется для добавления возможностей к объектам динамично (то есть, во время выполнения). Обычно объекту зафиксируют его возможности, когда Вы запишете класс. Но важный момент - то, что функциональность объекта расширяется способом, который очевиден для клиента объекта, потому что это реализует тот же интерфейс, как исходный объект делегирует ответственность перед украшенным объектом.

шаблон "декоратор" работает в сценариях, где существуют многие дополнительная функциональность, которую может иметь объект. Без шаблона "декоратор" необходимо будет создать различный класс для каждой конфигурации объектной опции. Один пример, который довольно полезен, прибывает из Главные Первые Шаблоны разработки книга O'Reilly. Это использует пример кафе, который звучит точно так же, как Starbucks.

, Таким образом, у Вас есть основной кофе с методом, любят стоимость.

public double cost(){
     return 3.45;
}

Тогда клиент может добавить сливки, которые стоят 0.35, таким образом, Вы теперь создаете класс CoffeeCream с методом расчета затрат:

public double cost(){
    return 3.80;
}

Тогда клиент может хотеть Мокко, которое стоит 0.5, и они могут хотеть Мокко со Сливками или Мокко без Сливок. Таким образом, Вы создаете классы CoffeeMochaCream и CoffeeMocha. Тогда клиент хочет густые сливки, таким образом, Вы создаете класс CoffeeCreamCream†¦ и т.д., С чем Вы заканчиваете, взрыв класса. Извините используемый плохой пример. Немного поздно, и я знаю, что это тривиально, но это действительно выражает точку.

Вместо этого можно создать абстрактный класс Объекта с абстрактным методом расчета затрат:

public abstract class Item{
    public abstract double cost();
}

И можно создать конкретный класс Кофе, который расширяет Объект:

public class Coffee extends Item{
    public double cost(){
       return 3.45;
    }
}

Тогда Вы создаете CoffeeDecorator, которые расширяют тот же интерфейс и содержат Объект.

public abstract class CoffeeDecorator extends Item{
     private Item item;
     ...
}

Тогда можно создать конкретных декораторов для каждой опции:

public class Mocha extends CoffeeDecorator{

   public double cost(){
     return item.cost() + 0.5;
   }

}

Уведомление, как декоратор не заботится, какой объект оно обертывает, пока это - Объект? Это использует стоимость () объекта объекта и просто добавляет его собственную стоимость.

public class Cream extends CoffeeDecorator{

   public double cost(){
     return item.cost() + 0.35;
   }

}

Теперь это возможно для большого количества конфигураций с этими немногими классами: например,

 Item drink = new Cream(new Mocha(new Coffee))); //Mocha with cream

или

 Item drink = new Cream(new Mocha(new Cream(new Coffee))));//Mocha with double cream

И так далее.

304
задан codeforester 10 April 2018 в 10:52
поделиться