书店会员销售系统(三)
2006-03-14 11:10
316 查看
书店会员销售系统(三)
[/b] ――OO、Refactoring and Design Pattern
本节目的:
1. 学习使用Abstract Factory模式。
2. 学习使用Factory Method模式。
3. 使用重构手法。
客户: “你们前期的工作很不错,我们非常满意。”
项目经理:“谢谢你们的肯定。”
客户: “不过打印的功能我想下个版本应该做好了吧?”
项目经理:“你们的打印是不是要支持屏幕打印和纸张打印两种模式?”
客户: “Very Good!我就想这样做,你刚才不提醒我,我可能还忘了呢。”
项目经理:“好的,下个版本我们会实现这个功能的。”
等客户走后,项目经理的脸沉了下来:“狡猾狡猾的,先表扬了一下,我看就没有好心肠,这不,活又来了。”然后径直向程序员走去。
客户就是上帝,这点我们不容怀疑。
最苦的还是程序员,这点我们也不容怀疑。
先来分析一下,这里有两种打印方式:POS机屏幕打印,纸张打印,理所当然要建一个抽象类,然后建两个子类。
为了方便,我们这里只打印累计点数和金额。
CPrint *pPrint = new CScreenPrint;
bool bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
pPrint = new CPaperPrint;
bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
CPrint类代码如下:
class CPrint
CScreenPrint类代码如下:
class CScreenPrint : public CPrint
bool CScreenPrint::Print(int nPoint,float fSum)
CPaperPrint类代码如下:
class CPaperPrint : public CPrint
bool CPaperPrint::Print(int nPoint,float fSum)
编译通过,测试用例通过。
程序运行的很好,没有新的需求,我们就让它这样吧,何必自寻烦恼呢?
然而天下哪有这么好的事呢,过不了多久,客户就开始抱怨了:“我有两个分店,我想每个分店的打印格式不同。”
不可否认,这确实是一个合理的要求,那就做吧,开始重构,使新功能更容易加入。
首先进行改名,UML图如下:
bool CScreenPrintShop1::Print(int nPoint,float fSum)
修改CPaperPrintShop1::Print函数为:
bool CPaperPrintShop1::Print(int nPoint,float fSum)
当然main函数中也要做相应地改动。
编译通过,测试用例通过。
现在可以增加shop 2了,UML图如下:
CPrintFactory* pPrintFactory = new CShop1PrintFactory;
然后在调用的地方写如下代码:
CPrint *pPrint = pPrintFactory->CreateScreenPrint();
bool bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
pPrint = pPrintFactory->CreatePaperPrint();
bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
开始写代码吧,用在写代码的时间其实是比较少的,大多数的时间都是在设计和调试上,而调试的时间又占了大部分,我们要增加编程的效率,缩短调试的时间是最有效的,而建立测试用例就是一个很有效的方法。
使用C++语言编写,在VC++ 6.0环境调试通过。
代码下载
[/b]参考资料:
[/b] [/b]《Refactoring: Improving the Design of Existing Code》 ――Martin Fowler
《Design Patterns - Elements of Reusable Object-Oriented Software》 ――GoF
[/b] ――OO、Refactoring and Design Pattern
本节目的:
1. 学习使用Abstract Factory模式。
2. 学习使用Factory Method模式。
3. 使用重构手法。
客户: “你们前期的工作很不错,我们非常满意。”
项目经理:“谢谢你们的肯定。”
客户: “不过打印的功能我想下个版本应该做好了吧?”
项目经理:“你们的打印是不是要支持屏幕打印和纸张打印两种模式?”
客户: “Very Good!我就想这样做,你刚才不提醒我,我可能还忘了呢。”
项目经理:“好的,下个版本我们会实现这个功能的。”
等客户走后,项目经理的脸沉了下来:“狡猾狡猾的,先表扬了一下,我看就没有好心肠,这不,活又来了。”然后径直向程序员走去。
客户就是上帝,这点我们不容怀疑。
最苦的还是程序员,这点我们也不容怀疑。
先来分析一下,这里有两种打印方式:POS机屏幕打印,纸张打印,理所当然要建一个抽象类,然后建两个子类。
为了方便,我们这里只打印累计点数和金额。
CPrint *pPrint = new CScreenPrint;
bool bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
pPrint = new CPaperPrint;
bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
CPrint类代码如下:
class CPrint
CScreenPrint类代码如下:
class CScreenPrint : public CPrint
bool CScreenPrint::Print(int nPoint,float fSum)
CPaperPrint类代码如下:
class CPaperPrint : public CPrint
bool CPaperPrint::Print(int nPoint,float fSum)
编译通过,测试用例通过。
程序运行的很好,没有新的需求,我们就让它这样吧,何必自寻烦恼呢?
然而天下哪有这么好的事呢,过不了多久,客户就开始抱怨了:“我有两个分店,我想每个分店的打印格式不同。”
不可否认,这确实是一个合理的要求,那就做吧,开始重构,使新功能更容易加入。
首先进行改名,UML图如下:
bool CScreenPrintShop1::Print(int nPoint,float fSum)
修改CPaperPrintShop1::Print函数为:
bool CPaperPrintShop1::Print(int nPoint,float fSum)
当然main函数中也要做相应地改动。
编译通过,测试用例通过。
现在可以增加shop 2了,UML图如下:
CPrintFactory* pPrintFactory = new CShop1PrintFactory;
然后在调用的地方写如下代码:
CPrint *pPrint = pPrintFactory->CreateScreenPrint();
bool bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
pPrint = pPrintFactory->CreatePaperPrint();
bRel = pPrint->Print(pMember->GetPoint(),fConsumeSum);
assert(bRel);
delete pPrint;
开始写代码吧,用在写代码的时间其实是比较少的,大多数的时间都是在设计和调试上,而调试的时间又占了大部分,我们要增加编程的效率,缩短调试的时间是最有效的,而建立测试用例就是一个很有效的方法。
使用C++语言编写,在VC++ 6.0环境调试通过。
代码下载
[/b]参考资料:
[/b] [/b]《Refactoring: Improving the Design of Existing Code》 ――Martin Fowler
《Design Patterns - Elements of Reusable Object-Oriented Software》 ――GoF
相关文章推荐
- 书店会员销售系统(二)
- 书店会员销售系统(二)
- 书店会员销售系统(序)
- 书店会员销售系统(一)
- 书店会员销售系统(一)
- 书店会员销售系统(三)
- Java之------单机版书店管理系统(设计思想和设计模式系列六)销售模块
- Java之------单机版书店管理系统(设计思想和设计模式系列六)销售模块
- 会员积分制销售系统-精通ASP.NET 企业级开发(王岩)
- 在线书店销售系统设计
- 企业为什么要上销售管理系统?销售管理系统有什么功能?
- 智方6000系标准销售管理系统 襄樊石开软件公司
- 数据库课程设计--“茶咖啡”销售管理系统总结
- 医药自动化销售系统需求整理
- 跟老紫竹学Java-图书销售系统-服务接口和实现
- Java SSM 商户管理系统 客户管理 库存管理 销售报表 项目源码
- C#_会员管理系统:开发二(会员资料管理界面的‘增删改查’)
- 服装PDA软件|服装销售开单PDA管理软件|服装PDA管理系统|服装PDA点货系统|服装移动POS系统
- C#_会员管理系统:开发五(用户注册)
- 销售管理系统设计与实现源码