- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
流动的程序设计:流程
baidic@yahoo.cn
面向对象的三板斧
主管要求小程设计一个简单的仓库,他毫不犹豫地选择了面向对象。
面向对象的程序设计该怎样进行呢?
没错,正如教科书所讲:抽象、封装、继承……
小程首先抽象出【货物】、【库房】与【保管员】三个对象,然后分别为它们封装属性和行为,结果大致如下:
货物属性:
货物
属性:名称
属性:位置
属性:数量
库房
属性:库存清单
行为:入库
行为:出库
行为:查找货物
行为:更新库存
保管员
行为:记录流水账
很简单嘛,已经可以开始使用了。
然而没过几天,保管员就开始抱怨:【库房】总爱偷懒!每次入库或者出库之后,他都得提醒【库房】去更新库存。如果一时疏忽了,他就不得不花费大量的时间去重新清点库存。这本来不就应该是【库房】的分内之事吗?
唔,这个简单,修改一下【库房】的入库与出库,让它们去执行更新库存就行了。
没等小程松口气,主管又要求小程为每件货物增加一个条形码,以便根据条形码来识别货物。
这个就麻烦多了,需要给【货物】增加新的属性:条形码,同时给【库房】增加新的行为:识别货物,并修改所有既有的行为,以适用于条形码方式,而且要把这些变化告知保管员。
库房行为:识别货物
库房
行为:识别货物
行为:查找货物
……
货物
属性:条形码
……
小程正忙于修改程序,保管员又提出一个新点子:【库房】应该更勤快点,自动记录流水账,这样他就不用担心会遗漏流水账了。
还有,主管要求货物分类放置,方便以后拆分仓库……
……
小程很快发现,【库房】的行为增加到了十几个甚至更多,保管员对此晕头转向,威胁说如果小程不改善仓库,他就跳槽……
正当小程一筹莫展时,一个叫【工场】的家伙跳了出来,声称能改变这一切……
使用工场
先来看看工场的名片:
工场
工场
行为:开工
其他对外保密
【工场】接着做自我介绍:
工场(理论上)只做一件事情或者一类事情;
工场只开放一个单向访问入口;
工场(理论上)是独立的,封闭的;
工场相对固定,不随入口数据的变化而变化;
唔,貌似很单纯又很神秘的一个对象。小程决定尝试从【工场】继承一个【库房工场】:
库房工场
库房工场
行为:开工
内部属性:库存清单
内部行为:入库、出库、查找货物、更新库存、识别货物……
这下保管员开心了,他只需要告诉【库房】:来货物了,开工啦,或者,嘿,出库单来了,快开工……库房就会把所有的任务依次完成。
不过小程就比较郁闷了,他不得不对每一种情况进行判断,如果是货物,【库房】需要执行入库、贴条形码、更新库存、记录流水账,如果是出库单,【库房】需要出库、更新库存、记录流水账……
而且,假如以后要添加一个行为,可能所有的流程都会受到影响……想一想小程就头大如斗……保管员开心了,他却更痛苦了……
嘿,【工场】再次跳了出来,不要把流程放进【工场】里,那是另一个家伙【流程】的事情,【工场】只是用来做事情的。但是,一件事往往不是简简单单的一件事,所以,告诉你一个好消息:
工场具备动态执行自己的行为的能力;
工场按照预置流程(像一道流水线一样)智能运作。
智能工场
小程顿时来了兴致,怎么才能让工场智能运作?
首先,需要设置预置流程,外部配置文件是个不错的选择:
库房工场
库房工场预置流程
货物入库:入库、贴条形码、更新库存、记录流水账……
清单出库:出库、更新库存、记录流水账……
……
默认流程:……
这下轻松多了,入库货物来的时候,只需要把预置流程同时交给【库房】,由于它的动态执行能力,它就会像流水线一样从头执行到尾:入库、贴条形码、更新库存、记录流水账;出库清单来的时候也一样。如果没有找到合适的预置流程,它就会去执行默认路程。而且,如果以后需要更改流程,甚至不用修改设计,只需要修改预置流程就行了。更妙的是,如果不小心发现了以前留下的问题,小程可以悄悄的修改好,而不必让任何人知道。
不管小程增加、删除或者修改【库房】,在保管员看来,【库房】都没有发生变化,他再也不用为【库房】的频繁变更而上火了。
对此小程提出了一个新的想法:【库房】应该更智能点,只需要告诉它货物入库,它会自己找到预置流程并执行。
没错,这是一个非常棒的想法。由于【工场】的封闭特性,你有两个选择:
把预置流程作为必须的构造参数(记得保留一个默认流程);
使用一种类似的方式:预置工场。
预置工场
单例模式你一定非常熟悉,无论你怎么创建或者获取对象,它总是一个静态的唯一的实体。这将非常适用于记录流水账一类的事情。
注意下面这个单例,看看它有什么不同:
class
class LogWork { # by PHP
private static $ENTRY = null;
public function __construct($flows = null){
if (! self:
您可能关注的文档
- 江中otc扩建彩板安装定稿.doc
- 浆砌片石护坡勾缝施工技术交底.doc
- 讲义《无线通信设备安装工程》安装移动通信设备解析.doc
- 浆砌砼预制块桥梁锥坡、护坡技术交底记录.doc
- 降水施工安全质量控制要点.doc
- 胶粉聚苯颗粒外墙外保温系统施工方案(涂料).doc
- 焦化厂煤气管道改造施工方案.doc
- 焦化控制系统的设计与维护雷登才.doc
- 胶粉聚苯颗粒外墙外保温施工方.doc
- 铰缝及板底勾缝标准化施工.doc
- [小区点评]北海花园(绍兴市越城区)小区居住环境竞争力评级及房价趋势报告(2024节选版).pdf
- Unit4TimetocelebrateStartingout课件-外研版七年级英语上册.pptx
- 浦东安全培训中心课件.pptx
- 2025年甘肃省护理学基础(专升本)考试真题及参考答案.docx
- 两数和乘以这两数的差(课件)华东师大版数学八年级上册.pptx
- 第1课时利用相似三角形测量距离(高度).pptx
- 2025年甘肃省护理学基础专升本考试真题及参考答案.docx
- 2025年甘肃省计算机基础(专升本)考试真题及参考答案.docx
- 2025至2030中国病人排班软件行业细分市场及应用领域与趋势展望研究报告.docx
- 2025年甘肃省计算机基础专升本考试真题及参考答案.docx
最近下载
- 装修材料品牌清单(主材、辅材、门窗等).docx VIP
- 道法人教版(2025)8上2.4.2《遵守规则》课件.pptx
- 2025-2026学年人教版(2024)小学体育与健康二年级(全一册)教学设计(附教材目录).docx
- 气调库工程项目可行性研究报告.docx
- 2025年二级矿井维修电工(技师)技能认定理论考试题库资料(含答案).pdf
- 功能性食品学 课件 第8章 益生菌及其活性代谢物.pptx
- 实验室质量管理体系文件.docx VIP
- 电工高级技师实操考试试卷.pdf VIP
- 初中阶段初阶词汇初级-如何记单词.docx VIP
- 中文版安德森吞咽困难量表的信效度和临床应用评价.pdf VIP
文档评论(0)