预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共39页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

软件设计模式——内容状态模式状态模式(续)状态模式(续)这样的代码到底会有什么问题呢? Checkstate(state) { switch(state){ case冻结: case正常: …… } }状态模式(续)状态模式(续)状态模式(续)状态模式(续)参与者 Context:环境类 State:抽象状态类 ConcreteState:具体状态类 状态模式(续)状态模式(续)具体实现(续) 冻结账号类 ///<summary> ///冻结账户类 ///</summary> publicclassDeadAccount:state { publicoverridedecimalgetBalance(decimald) { return0; } }具体实现(续) 激活账户类 ///<summary> ///激活账户类 ///</summary> publicclassActiveAccount:state { publicoverridedecimalgetBalance(decimald) { returnd; } }具体实现(续集) 交易类 ///交易类负责用户交易处理的类 publicclassTrade { ///保存用户账号信息 privateAccountaccount; publicAccountVolidateLogin(Accounta) { //querythedatabasetovalidatetheuserexists //ForExample this.account=newDeadAccount(); returnthis.account; } ///商业逻辑取款 ///<paramname="d"></param> publicdecimalGetBalance(decimald) { returnthis.account.getBalance(d); } }具体实现(续) 用户类 ///取款人 publicclassUser { ///用户账号信息 privateAccountaccount; ///交易处理类 privateTradetrade; publicUser(Accounta,Tradet) { this.account=a; tthis.trade=t; } ///用户登录类 publicvoidLogin() { trade.VolidateLogin(account); } ///取款 publicdecimalGetBalance(decimald) { returntrade.GetBalance(d); } }具体实现(续) 客户端代码 classClient { staticvoidMain(string[]args) { //开始用户取款,默认是激活账户 ActiveAccountaa=newActiveAccount(); Tradet=newTrade(); Useru=newUser(aa,t); //先登录,后取款 u.Login(); Console.WriteLine(u.GetBalance(100)); Console.ReadLine(); } }状态模式(续)PM(抬头询问):有什么困难没有? 我:没有,我已经将代码写好了,您看看。(迅速的将写满代码的稿纸递给PM) PM(看了一会儿)赞许道:效率不错啊,这么一下子就为公司搞定这个单子。OK,为了表示对你的奖励,周末可以不用加班了。 一年过去了,你已经坐上PM的座位了,你当初写下的那个电梯控制程序也一直运行良好,谁说需求总是会变,一年了那个需求就没有变过,但是不愿意看到的事还是发生了 客户打来电话抱怨说:你的程序运行的很好,但是每次关门的时候非要门完全关上后才能按开门,不能在中途开门,关门也是如此。 思考了下,觉得这个变更是合理的,满口答应了客户的要求。心里想着:不就是加两个状态嘛 修改的代码很快你又交差了,但是这次你有点不爽,当上PM后整天嘴里都是架构、模式,什么开闭原则啊,面向接口编程啊,依赖抽象不依赖具体。可为什么到自己编的时候却总是达不到呢?难道这些OO原则都存在于子虚国?不过心情也不是太差,毕竟完成了客户的需求,还是重复那句古老的经典:如果它还可以运行,就不要动它。 三个月后: 客户:Hello,老兄,我们的电梯接到一个单子,有个电影公司找到我们,要我们提供这样一种电梯,电梯在运行的时候也可以开关门,这样他们就可以拍摄一些特技动作,比如演员跳进正在上升但门是开着的电梯内。 我:………….. 客户:怎么?有困难么?电影公司说要拍一部什么《电梯惊魂》的影片,可能以后有更多的需求变化呢,等电影拍完了有你的好处,呵呵。 我:没有,马上搞定。 我(心里想):我说怎么瞧这设计都不怎么