通过调试的重构代码(设计是对的,但是实现过程却有诸多的问题)
2014-01-02 16:32
441 查看
#!/usr/bin/env python class Processor: def __init__(self, processor): self.processor = processor def isAllowSend(self, message, setChargeFlag): pass class WhildListProcessor(Processor): def isAllowSend(self, message, setChargeFlag): print "WhildListProcessor.isAllowSend is Running" if message.sender in (1,2): print "WhildListProcessor.isAllowSend return True" return True return self.processor.isAllowSend(message, setChargeFlag) class DateProcessor(Processor): def isAllowSend(self, message, setChargeFlag): print "DateProcessor.isAllowSend is Running" if message.date > "20130101": print "DateProcessor.isAllowSend return False" return False return self.processor.isAllowSend(message, setChargeFlag) class DefaultProcessor(Processor): def isAllowSend(self, message, setChargeFlag): print "DefaultProcessor.isAllowSend is Running" setChargeFlag(message) print "DefaultProcessor.isAllowSend return True" return True def getProcessor(): return WhildListProcessor(DateProcessor(DefaultProcessor(None))) class Message: def __init__(self, sender): self.sender = sender self.isSend = False self.isCharge = False self.date = "20110201" def setChargeFlag(message): print "Set Charge Flag" message.isCharge = True def setSendFlag(message): print "Set Send Flag" message.isSend = True def run(): message = Message(10) processor = getProcessor() if (processor.isAllowSend(message, setChargeFlag)): setSendFlag(message) run()
这是前一篇博客里的代码,通过实际调试之后的代码,下列的体会:
1, 设计是对的
2, 我在实现设计的过程里却有bug产生
2,1 WhildListProcessor 等类的isAllowSend方法没有return
2,2 DefaultProcessor没有继承我的Processor类
2,3 既然增加了DateProcessor类并检查了Message.date属性,却没在Message类里增加date属性
2,4 出现一个拼写错误 DefaultProcessor 写成 DefaltProcessor
实际上我的多数bug都是这么产生的,是我的性格太粗疏了吗? :( 另外,各位看官,这是一个设计模式,您看出来了吗
相关文章推荐
- openwrt 问题二 js 通过nginx 服务器调用 lua代码的过程实现
- 按"利用C++语言设计可扩展线程池"文章实现代码,但是有问题,希望大家来讨论,指出问题,谢谢
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- Google 系应用设计相同、支持拉伸、修正原生实现诸多问题的星级评分条。可直接替换 RatingBar。
- 通过pycharm实现远程代码的调试和开发
- n皇后问题代码实现(已运行通过)
- 通过FTP实现Internet上MS SQL Server数据库复制-调试问题
- 基于X.509证书和SSL协议的身份认证过程实现(OpenSSL可以自己产生证书,有TCP通过SSL进行实际安全通讯的实际编程代码)good
- 根据wsdl接口,通过Apache cxf 生成wsdljava客户端代码,过程中出现的问题记录
- ASP.NET2.0中GRIDVIEW控件完全代码实现模版列排序!(代码调试已通过)
- 经典面试编程题--atoi()函数的实现(就是模拟手算,核心代码就一句total = 10 * total + (c - '0'); 但是要注意正负号、溢出等问题)
- 代码重构调试问题集合
- 在通过android的广播机制拦截短信的实现过程中遇到的问题
- 通过代码实现调用C可执行文件的问题
- DataView数据视图实现数据过滤,排序(代码调试通过)
- 密保问题数据库设计思路和代码实现
- 应用框架的设计与实现——.NET平台4.2代码测试问题解决
- 通过调试寄存器不修改代码实现bt功能
- Mac 通过命令行编译运行C代码 以及生成和调用静态库 以及Makefile实现过程
- 通过调试寄存器不修改代码实现bt功能