1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| program main use Abstract_Component_Module, only : BeverageType use Concrete_Component_Module, only : WaterType, MilkType use Abstract_Decorator_Module, only : DecoratorType use Concrete_Decorator_Module, only : SugarDecorator, CoffeeDecorator implicit none
class(BeverageType), pointer :: water, milk class(DecoratorType), pointer :: sugaredWater, sugaredMilk, coffeeSugaredWater
allocate(WaterType :: water) allocate(MilkType :: milk)
allocate(SugarDecorator :: sugaredWater) sugaredWater%component => water
allocate(SugarDecorator :: sugaredMilk) sugaredMilk%component => milk
allocate(CoffeeDecorator :: coffeeSugaredWater) coffeeSugaredWater%component => sugaredWater
write(*, '(A, F5.1)') trim(sugaredWater%getName()), sugaredWater%getPrice() write(*, '(A, F5.1)') trim(sugaredMilk%getName()), sugaredMilk%getPrice() write(*, '(A, F5.1)') trim(coffeeSugaredWater%getName()), coffeeSugaredWater%getPrice()
deallocate(coffeeSugaredWater) deallocate(sugaredMilk, sugaredWater) deallocate(milk, water) end program main
|