Ошибка в декораторе
Добавлено: 02 апр 2014, 14:44
Добрый день!
Пробую разобраться в паттерне Декоратор. В качестве примера программа. Есть класс напитков. У каждого напитка есть описание и цена.
От него наследуют эспрессо, черный чай и т.д.
Создан класс добавок. Он наследует от напитков, чтобы можно было оперировать типами в дальнейшем.
Теперь добавляем класс Молоко
Хотим создать эспрессо с молоком. В main пишем
Трейсами выдает:
Beverage: function Function() {} Milk Cost: 0
Хотя должен по идее:
Beverage: Espresso. Milk. Cost: 310
Пробую разобраться в паттерне Декоратор. В качестве примера программа. Есть класс напитков. У каждого напитка есть описание и цена.
Код: Выделить всё
package { public class BeverageBase { public var _description:String = ""; // Описание напитка public function BeverageBase(){} public function getDescription():String { return _description; } public function getCost():int { return 1; } }}
Код: Выделить всё
package { public class Espresso extends BeverageBase { public function Espresso() { _description = "Espresso"; } public override function getCost():int { return 250; } }}
Код: Выделить всё
package { public class CondimentsDecoratorBase extends BeverageBase { public function CondimentsDecoratorBase() {} }}
Код: Выделить всё
package { public class MilkCondiment extends CondimentsDecoratorBase { public var _beverage:BeverageBase; public function MilkCondiment(beverage:BeverageBase) { _beverage = beverage; _description = _beverage.getDescription + " Milk."; } public override function getCost():int { return _beverage.getCost + 60; } }}
Код: Выделить всё
var _cappuccino:BeverageBase = new MilkCondiment(new Espresso());trace("Beverage: " + _cappuccino.getDescription() + " Cost: " + _cappuccino.getCost());
Beverage: function Function() {} Milk Cost: 0
Хотя должен по идее:
Beverage: Espresso. Milk. Cost: 310