Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---装饰模式之StarBuzzCoffee
2009-11-10 15:39
453 查看
1.被装饰者
2.装饰者
3.客户端
运行结果:
{《HeadFirst设计模式》之装饰模式 } { 本单元中的类为被装饰者 } { 编译工具: Delphi7.0 } { E-Mail : xshlife@163.com } unit uComponent; interface type TBeverage = class(TObject) //抽象饮料类 protected FDescription: String; public function GetDescription: String; virtual; function Cost: Double; virtual; abstract; end; TEspresso = class(TBeverage) //浓咖啡饮料类 public constructor Create; function Cost: Double; override; end; THouseBlend = class(TBeverage) //具体HouseBlend饮料类 public constructor Create; function Cost: Double; override; end; TDarkRoast = class(TBeverage) //具体DarkRoast饮料类 public constructor Create; function Cost: Double; override; end; implementation { TBeverage } function TBeverage.GetDescription: String; begin Result := FDescription; end; { TEspresso } function TEspresso.Cost: Double; begin Result := 1.99; end; constructor TEspresso.Create; begin FDescription := 'Espresso'; end; { THouseBlend } function THouseBlend.Cost: Double; begin Result := 0.89; end; constructor THouseBlend.Create; begin FDescription := 'House Blend Coffee'; end; { TDarkRoast } function TDarkRoast.Cost: Double; begin Result := 0.99; end; constructor TDarkRoast.Create; begin FDescription := 'Dark Roast Coffee'; end; end.
2.装饰者
{《HeadFirst设计模式》之装饰模式 } { 装饰者既继承又组合被装饰者。继承 } { 在这里的意图主要是类型匹配 —— } { 与被装饰者是同一类型。 } { 编译工具: Delphi7.0 } { E-Mail : xshlife@163.com } unit uDecorator; interface uses uComponent; type TCondimentDecorator = class(TBeverage) //抽象装饰者 end; TMocha = class(TCondimentDecorator) //具体装饰者:Mocha private FBeverage: TBeverage; public constructor Create(aBeverage: TBeverage); function GetDescription: String; override; function Cost: Double; override; end; TSoy = class(TCondimentDecorator) //具体装饰者:Soy private FBeverage: TBeverage; public constructor Create(aBeverage: TBeverage); function GetDescription: String; override; function Cost: Double; override; end; TWhip = class(TCondimentDecorator) //具体装饰者:Whip private FBeverage: TBeverage; public constructor Create(aBeverage: TBeverage); function GetDescription: String; override; function Cost: Double; override; end; implementation { TMocha } function TMocha.Cost: Double; begin Result := FBeverage.Cost + 0.20; end; constructor TMocha.Create(aBeverage: TBeverage); begin FBeverage := aBeverage; end; function TMocha.GetDescription: String; begin Result := FBeverage.GetDescription + ', Mocha'; end; { TSoy } function TSoy.Cost: Double; begin Result := FBeverage.Cost + 0.15; end; constructor TSoy.Create(aBeverage: TBeverage); begin FBeverage := aBeverage; end; function TSoy.GetDescription: String; begin Result := FBeverage.GetDescription + ', Soy'; end; { TWhip } function TWhip.Cost: Double; begin Result := FBeverage.Cost + 0.10; end; constructor TWhip.Create(aBeverage: TBeverage); begin FBeverage := aBeverage; end; function TWhip.GetDescription: String; begin Result := FBeverage.GetDescription + ', Whip'; end; end.
3.客户端
{《HeadFirst设计模式》之装饰模式 } { 客户端 } { 编译工具: Delphi7.0 } { E-Mail : xshlife@163.com } program pStarBuzzCoffee; {$APPTYPE CONSOLE} uses SysUtils, uComponent in 'uComponent.pas', uDecorator in 'uDecorator.pas'; var aBeverage1: TBeverage; aBeverage2: TBeverage; aBeverage3: TBeverage; begin aBeverage1 := TEspresso.Create; Writeln(aBeverage1.GetDescription + ' $' + FloatToStr(aBeverage1.Cost)); FreeAndNil(aBeverage1); aBeverage2 := TDarkRoast.Create; aBeverage2 := TWhip.Create(TMocha.Create(TMocha.Create(aBeverage2))); Writeln(aBeverage2.GetDescription + ' $' + FloatToStr(aBeverage2.Cost)); FreeAndNil(aBeverage2); aBeverage3 := THouseBlend.Create; aBeverage3 := TSoy.Create(aBeverage3); aBeverage3 := TMocha.Create(aBeverage3); aBeverage3 := TWhip.Create(aBeverage3); Writeln(aBeverage3.GetDescription + ' $' + FloatToStr(aBeverage3.Cost)); FreeAndNil(aBeverage3); Readln; end.
运行结果:
![](http://p.blog.csdn.net/images/p_blog_csdn_net/djCode/EntryImages/20091110/picStarBuzzCoffee.jpg)
相关文章推荐
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---门面模式之HomeTheater
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---工厂模式之简单工厂
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之RemoteControlTest
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---观察者模式之WeatherReport
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---模板方法模式之CoffeineBeverageWithHook
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteWithUndoTest
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---迭代器模式之DinerMenu
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---适配器模式之TurkeyAdapter
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---命令模式之SimpleRemoteControlTest
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---策略模式之MiniDuckSimulator
- Delphi 设计模式:《HeadFirst设计模式》Delphi7代码---状态模式
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---工厂模式之工厂方法
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---工厂模式之抽象工厂
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---单例模式之ChocolateBoiler
- Delphi 设计模式:《HeadFirst设计模式》Delphi2007代码---组合模式之Menus
- Delphi 设计模式:《HeadFirst设计模式》Delphi代码---模式小结之一个叫声接口和几只鸭子
- 设计模式之装饰模式(iOS开发,代码用Objective-C展示)
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 设计模式:装饰模式的原理及代码演示
- 23种设计模式java实例代码之装饰模式