您现在的位置是:首页
>
方法工厂模式 用Delphi2005学设计模式之工厂方法篇
用Del hi2005学设计模式之工厂方法篇 本文完成以下内容 代码用支持中文的 Del hi 编译并通过 并去除了其中一些无关紧要的地方 如异常处理等 重新设计一个情景 分别用

用Delphi2005学设计模式之工厂方法篇
本文完成以下内容 代码用支持中文的 Delphi 编译并通过 并去除了其中一些无关紧要的地方 如异常处理等 重新设计一个情景 分别用 简单工厂模式 和 工厂方法模式 两种方法实现 请体会其中的差别 在情景中添加一个子类后 请体会 简单工厂模式 和 工厂方法模式 两种方法不同的处理方式 如果不理解什么是接口 多态 静态函数等概念 这里不作解释 请看第一章或找相关资料 本文的情景和上文差不多 只是把工厂从 果园 变成了 水果小贩 同样的三种水果 苹果 葡萄 草莓 每种水果都封装了两个逻辑 在和外部 交易 时会用到这两个逻辑 最后 请重新回顾 开闭原则 下面开始吧 这里是简单工厂模式的实现方法 在这种模式中 一个小贩要负责所有三种水果的交易 这对他来说是很大的挑战噢 不信您看! 顾客必须对水果的名字有一个准确地描述 这样水果才会卖给你 这很影响生意呀! //简单工厂类和水果类单元文件 unit SimpleFactory; interface type 接口_水果 = interface(IInterface) function 提示():string; function 被评价():string; end; 类_苹果 = class(TInterfacedObject 接口_水果) function 提示():string; function 被评价():string; end; 类_葡萄 = class(TInterfacedObject 接口_水果) function 提示():string; function 被评价():string; end; 类_草莓 = class(TInterfacedObject 接口_水果) function 提示():string; function 被评价():string; end; 工厂类_小贩 = class(TObject) public class function 工厂(水果名:string): 接口_水果; end; implementation {***** 类_苹果 *****} function 类_苹果 提示():string; begin result:= 削了皮再吃! ; end; function 类_苹果 被评价():string; begin result:= 恩 还不错 挺甜! ; end; {*****类_葡萄 *****} function 类_葡萄 提示():string; begin result:= 别把核咽下去了! ; end; function 类_葡萄 被评价():string; begin result:= 没有核呀??? ; end; {***** 类_草莓 *****} function 类_草莓 提示():string; begin result:= 别怪我没告诉你 很酸! ; end; function 类_草莓 被评价():string; begin result:= 试试?哇 牙快酸掉了! ; end; {***** 工厂类_小贩 *****} class function 工厂类_小贩 工厂(水果名:string): 接口_水果; begin if(水果名= 苹果 )then result:=类_苹果 Create() else if(水果名= 葡萄 )then result:=类_葡萄 Create() else if(水果名= 草莓 )then result:=类_草莓 Create(); end; end //窗体单元文件 unit MainForm; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls SimpleFactory; type TForm = class(TForm) RadioButton : TRadioButton; RadioButton : TRadioButton; RadioButton : TRadioButton; procedure RadioButton Click(Sender: TObject); procedure RadioButton Click(Sender: TObject); procedure RadioButton Click(Sender: TObject); private procedure 交易(水果名:string); end; var Form : TForm ; implementation {$R * dfm} procedure TForm 交易(水果名:string); var 我买的水果: 接口_水果; begin 我买的水果:=工厂类_小贩 工厂(水果名); ShowMessage(我买的水果 提示); ShowMessage(我买的水果 被评价); end; procedure TForm RadioButton Click(Sender: TObject); begin 交易( 苹果 ); end; procedure TForm RadioButton Click(Sender: TObject); begin 交易( 葡萄 ); end; procedure TForm RadioButton Click(Sender: TObject); begin 交易( 草莓 ); end; end 这里是工厂方法模式的实现方法 在这种模式中 每一种水果都对应有一个小贩负责 这样他们做起生意来就轻松多了 呵呵! 顾客直接和小贩打交道 他知道您要什么 这样就不会因为说不清那讨厌的水果名字而吃不上说水果了 //工厂类和水果类单元文件 unit FactoryMethod; interface type 接口_水果 = interface(IInterface) function 提示():string; function 被评价():string; end; 类_苹果 = class(TInterfacedObject 接口_水果) function 提示():string; function 被评价():string; end; 类_葡萄 = class(TInterfacedObject 接口_水果) function 提示():string; function 被评价():string; end; 类_草莓 = class(TInterfacedObject 接口_水果) function 提示():string; function 被评价():string; end; 接口_小贩 = interface(IInterface) function 工厂(): 接口_水果; end; 类_苹果小贩 = class(TInterfacedObject 接口_小贩) function 工厂(): 接口_水果; end; 类_葡萄小贩 = class(TInterfacedObject 接口_小贩) function 工厂(): 接口_水果; end; 类_草莓小贩 = class(TInterfacedObject 接口_小贩) function 工厂(): 接口_水果; end; implementation {****** 类_苹果 ******} function 类_苹果 提示():string; begin result:= 削了皮再吃! ; end; function 类_苹果 被评价():string; begin result:= 恩 还不错 挺甜! ; end; {****** 类_葡萄 ******} function 类_葡萄 提示():string; begin result:= 别把核咽下去了! ; end; function 类_葡萄 被评价():string; begin result:= 没有核呀??? ; end; {****** 类_草莓 ******} function 类_草莓 提示():string; begin result:= 别怪我没告诉你 很酸! ; end; function 类_草莓 被评价():string; begin result:= 试试?哇 牙快酸掉了! ; end; {***** 类_苹果小贩 *****} function 类_苹果小贩 工厂(): 接口_水果; begin result:=类_苹果 Create() end; {***** 类_葡萄小贩 *****} function 类_葡萄小贩 工厂(): 接口_水果; begin result:=类_葡萄 Create() end; {***** 类_草莓小贩 *****} function 类_草莓小贩 工厂(): 接口_水果; begin result:=类_草莓 Create() end; end //窗体单元文件 unit MainForm; interface uses Windows Messages SysUtils Variants Classes Graphics Controls Forms Dialogs StdCtrls FactoryMethod; type TForm = class(TForm) RadioButton : TRadioButton; RadioButton : TRadioButton; RadioButton : TRadioButton; procedure RadioButton Click(Sender: TObject); procedure RadioButton Click(Sender: TObject); procedure RadioButton Click(Sender: TObject); private procedure 交易(小贩:接口_小贩); end; var Form : TForm ; implementation {$R * dfm} procedure TForm 交易(小贩:接口_小贩); var 我买的水果:接口_水果; begin 我买的水果:=小贩 工厂(); ShowMessage(我买的水果 提示); ShowMessage(我买的水果 被评价); end; procedure TForm RadioButton Click(Sender: TObject); begin 交易(类_苹果小贩 Create); end; procedure TForm RadioButton Click(Sender: TObject); begin 交易(类_葡萄小贩 Create); end; procedure TForm RadioButton Click(Sender: TObject); begin 交 lishixinzhi/Article/program/Delphi/201311/8421 很赞哦! (1083)