首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

研磨设计模式 之 状态模式(State)一——跟着cc学设计系列

2014-01-23 
研磨设计模式 之 状态模式(State)1——跟着cc学设计系列/**?* 投票管理?*/public class VoteManager {??? /*

研磨设计模式 之 状态模式(State)1——跟着cc学设计系列

/**

?* 投票管理

?*/

public class VoteManager {

??? /**

??? ?* 记录用户投票的结果,Map<String,String>对应Map<用户名称,投票的选项>

??? ?*/

??? private Map<String,String> mapVote =

new HashMap<String,String>();

??? /**

??? ?* 记录用户投票次数,Map<String,Integer>对应Map<用户名称,投票的次数>

??? ?*/

??? private Map<String,Integer> mapVoteCount =

new HashMap<String,Integer>();

??? /**

??? ?* 投票

??? ?* @param user 投票人,为了简单,就是用户名称

??? ?* @param voteItem 投票的选项

??? ?*/

??? public void vote(String user,String voteItem){

?????? //1:先为该用户增加投票的次数

?????? //先从记录中取出已有的投票次数

?????? Integer oldVoteCount = mapVoteCount.get(user);

?????? if(oldVoteCount==null){

?????????? oldVoteCount = 0;

?????? }

?????? oldVoteCount = oldVoteCount + 1;

?????? mapVoteCount.put(user, oldVoteCount);

??????

?????? //2:判断该用户投票的类型,到底是正常投票、重复投票、恶意投票

//还是上黑名单,然后根据投票类型来进行相应的操作??

?????? if(oldVoteCount==1){

?????????? //正常投票

?????????? //记录到投票记录中

?????????? mapVote.put(user, voteItem);

?????????? System.out.println("恭喜你投票成功");

?????? }else if(oldVoteCount>1 && oldVoteCount<5){

?????????? //重复投票

?????????? //暂时不做处理

?????????? System.out.println("请不要重复投票");

?????? }else if(oldVoteCount >= 5 && oldVoteCount<8){

?????????? //恶意投票

?????????? //取消用户的投票资格,并取消投票记录

?????????? String s = mapVote.get(user);

?????????? if(s!=null){

????????????? mapVote.remove(user);

?????????? }

?????????? System.out.println("你有恶意刷票行为,取消投票资格");

?????? }else if(oldVoteCount>=8){

?????????? //黑名单

?????????? //记入黑名单中,禁止登录系统了

?????????? System.out.println("进入黑名单,将禁止登录和使用本系统");

?????? }

??? }

}

写个客户端来测试看看,是否能满足功能要求,示例代码如下:

public class Client {

??? public static void main(String[] args) {

?????? VoteManager vm = new VoteManager();

?????? for(int i=0;i<8;i++){

?????????? vm.vote("u1", "A");

?????? }

??? }

}

运行结果如下:

恭喜你投票成功

请不要重复投票

请不要重复投票

请不要重复投票

你有恶意刷票行为,取消投票资格

你有恶意刷票行为,取消投票资格

你有恶意刷票行为,取消投票资格

进入黑名单,将禁止登录和使用本系统

18.1.3? 有何问题

看起来很简单,是不是?幸亏这里只是示意,否则,你想想,在vote()方法中那么多判断,还有每个判断对应的功能处理都放在一起,是不是有点太杂乱了,那简直就是个大杂烩,如果把每个功能都完整的实现出来,那vote()方法会很长的。

?????? 一个问题是:如果现在要修改某种投票情况所对应的具体功能处理,那就需要在那个大杂烩里面,找到相应的代码块,然后进行改动。

另外一个问题是:如果要添加新的功能,比如投票超过8次但不足10次的,给个机会,只是禁止登录和使用系统3天,如果再犯,才永久封掉账号,该怎么办呢?那就需要改动投票管理的源代码,在上面的if-else结构中再添加一个else if块进行处理。

不管哪一种情况,都是在一大堆的控制代码里面找出需要的部分,然后进行修改,这从来都不是好方法,那么该如何实现才能做到:既能够很容易的给vote()方法添加新的功能,又能够很方便的修改已有的功能处理呢?

?

---------------------------------------------------------------------------

私塾在线学习网原创内容 ?跟着cc学设计系列 之?研磨设计模式

?

原创内容,转载请注明出处【http://sishuok.com/forum/blogPost/list/5619.html】

---------------------------------------------------------------------------

热点排行