zoukankan      html  css  js  c++  java
  • 软考总结— 设计模式之状态模式

    版权声明:本文为博主原创文章,未经博主同意不得转载。 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),而且状态的切换由各个详细状态类来完毕。
       联系职责链模式:用来处理外部请求。而且使每个请求都有机会得到处理。跟状态模式非常类似,可是不同的是。职责链模式的请求处理是通过抽象处理类来维护的。


  • 相关阅读:
    非常牛的实现三个数交换
    assert后面如果是假则程序崩溃
    python三元操作符
    三种方法划分成绩等级
    爱因斯坦难题
    打印奇数
    判断给到的年份是否为闰年
    【bzoj1895】Pku3580 supermemo Splay
    【bzoj1050】[HAOI2006]旅行comf 并查集
    【bzoj4002】[JLOI2015]有意义的字符串 数论+矩阵乘法
  • 原文地址:https://www.cnblogs.com/mqxnongmin/p/10879968.html
Copyright © 2011-2022 走看看