最近看了刘伟老师的设计模式史上最全设计模式导学目录(完整版)_刘伟技术博客-CSDN博客学习了里面的状态模式,做一下后面的练习题。处理对象的多种状态及其相互转换——状态模式(六)_刘伟技术博客-CSDN博客
练习
Sunny软件公司欲开发一款纸牌游戏软件,在该游戏软件中用户角色具有入门级(Primary)、熟练级(Secondary)、高手级(Professional)和骨灰级(Final)四种等级,角色的等级与其积分相对应,游戏胜利将增加积分,失败则扣除积分。入门级具有最基本的游戏功能play() ,熟练级增加了游戏胜利积分加倍功能doubleScore(),高手级在熟练级基础上再增加换牌功能changeCards(),骨灰级在高手级基础上再增加偷看他人的牌功能peekCards()。
试使用状态模式来设计该系统。
首先说一下什么是状态模式:
状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。
然后分析问题,首先有用户对象,用户可以有多个等级,不同等级有不同的功能,用户等级是根据用户积分来确定的,并且下一个等级是在上一个等级基础上增加一定的功能,。 这里针对不同的等级还可以使用装饰模式来实现。这里来说一下装饰模式的概述
装饰模式(Decorator Pattern):动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。
扩展系统功能——装饰模式(二)_刘伟技术博客-CSDN博客
我们先定义状态接口,状态接口有三个方法,玩游戏方法play, 加分方法addScore,减分方法reduceScore:
然后创建用户对象:
然后创建状态类,入门级,熟练级,高手级,骨灰级,状态之间从低到高依次继承上一级。类图表示为:
入门级:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!