软考总结— 设计模式之状态模式

版权声明:本文为博主原创文章,未经博主同意不得转载。 https://blog.csdn.net/huo_yun/article/details/25954715

   软考在即。针对下午题的设计模式。本人有认为有必要从考试战略上略微做一些总结。

为什么呢?一方面设计模式仅仅要掌握好做题技巧。还是比較好拿分的。还有一方面,通过这次软考又进一步的学习设计模式。而且在题目中给出的设计模式都是在项目中非常好的应用。

   一開始做题,没有全局观

俗话说的好“不谋全局者不足谋一域”。无论做什么事,先在战略方向上把握好了,採取什么样的战术,都不成什么问题了。

所以考试也是一样。以下这道题就非常典型:


  【题目】

       某大型商场内安装了多个简易的纸巾售卖机。自己主动出售2元钱一包的纸巾,且每次仅售出一包纸巾。纸巾售卖机的状态图如图5-1所看到的:


 

     1.联系生活:纸巾售卖机跟自己主动售货机一样,想一下自己去买饮料的时候。是怎么操作的?

     2.注意宏观:宏观描写叙述状态转换,以免丢掉细节(比如。取下纸巾button。就有两种情况)

     3.题目跟UML图相应     

 

 【题目】

      採用状态(State)模式来实现该纸巾售卖机,得到如图5-2所看到的的类图。当中类State为抽象类,定义了投币、退币、出纸巾等方法接口。类SoldStateSoldOutStateNoQuarterStateHasQuarterState分别相应图5-1中纸巾售卖机的4种状态:售出纸巾、纸巾售完、没有投币、有2元钱。

    

    
   4.分析UML图 并与代码相应(代码就不贴了)

     依据UML图和代码,能够看出TissueMachine类中,枚举了各种详细状态并定义了当前对象State。在声明状态时须要用到抽象类State。所以第(1)空填State。


   后面的2~5个空。都是子类继承State抽象类,用于状态之间的转换。这时候。前面对题干的分析就显得非常重要了。依据题干可知。SoldState相应“售出纸巾”状态、SoldOutState 相应“纸巾售完”状态、NoQuarterState相应“没有纸币”状态、HasQuarterState相应“有2元钱”状态。


   比如第(2)空,状态类NoQuarterState(没有纸币)调用insertQuarter()方法,纸巾售卖机的状态将切换到“有2元钱”,因此setState()方法中的參数应该为详细状态类HasQuarterState对象,该对象已存在于环境类TissueMachine中,能够通过tissueMachine->getHasQuarterState()或tissueMachine.getHasQuarterState()或new HasQuarterState来获取。第(3)-(5)空与之类似。


总结

    1. 全局观:对题目有一个总体的把控
    2. 联系生活实际(自己主动售货机):了解状态之间的关系。看图说话
    3. 不要急功近利:上来就看代码。企图光看懂代码来做题
    4. 状态模式内涵:状态模式定义了一个 维护各个详细状态类(TissuMachine),而且状态的切换由各个详细状态类来完毕。
   联系职责链模式:用来处理外部请求。而且使每个请求都有机会得到处理。跟状态模式非常类似,可是不同的是。职责链模式的请求处理是通过抽象处理类来维护的。


posted @ 2019-05-17 10:25  mqxnongmin  阅读(375)  评论(0编辑  收藏  举报