? “开闭原则”:一个模块应该易于扩展,免于修改
问题:请考虑上一章的例子中,如果添加一个新的具体水果类“西瓜”需要做哪些工作。
本章完成以下内容: 1、代码用支持中文的 Delphi 2005 编译并通过,并去除了其中一些无关紧要的地方,如异常处理等 ; 2、重新设计一个情景,分别用“简单工厂模式”和“工厂方法模式”两种方法实现,请体会其中的差别 ; 3、在情景中添加一个子类后,请体会“简单工厂模式”和“工厂方法模式”两种方法不同的处理方式; 4、如果不理解什么是接口、多态、静态函数等概念,这里不作解释,请看第一章或找相关资料; 5、本章的情景和上一章差不多,只是把工厂从“果园”变成了“水果小贩”;同样的三种水果:苹果、葡萄、草莓;每种水果都封装了两个逻辑,在和外部“交易”时会用到这两个逻辑。 最后,请重新回顾“开闭原则”
下面开始吧。。。。。。。
这里是简单工厂模式的实现方法,在这种模式中: 1、一个小贩要负责所有三种水果的交易,这对他来说是很大的挑战噢,不信您看! 2、顾客必须对水果的名字有一个准确地描述,这样水果才会卖给你,这很影响生意呀!
//简单工厂类和水果类单元文件 unit SimpleFactory;interfacetype 接口_水果 = 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;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls,
[1] [2] [3] [4] 下一页
Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved. 闵涛 E_mail:admin@mintao.net(欢迎提供学习资源)
鄂公网安备 42011102001154号
站长:MinTao ICP备案号:鄂ICP备11006601号-18