状态模式

[img]http://dl2.iteye.com/upload/attachment/0117/5733/460dfb3c-45ab-375a-9054-866e774e819b.png[/img]


package pattern;
public interface VoteState {

public void vote(String user, String voteItem, VoteManager manager);
}


package pattern;
public class BlackVoteState implements VoteState {
@Override
public void vote(String user, String voteItem, VoteManager manager) {
System.out.println("你进入了黑名单。");
}
}


package pattern;
public class NormalVoteState implements VoteState {
@Override
public void vote(String user, String voteItem, VoteManager manager) {
manager.getMapVote().put(user, voteItem);
System.out.println("投票成功!");
manager.getMapState().put(user, new RepeatVoteState());
}
}

package pattern;
public class RepeatVoteState implements VoteState {
@Override
public void vote(String user, String voteItem, VoteManager manager) {
System.out.println("请不要重复投票。");

if (manager.getMapVoteCount().get(user) >= 4) {
manager.getMapState().put(user, new SpiteVoteState());
}
}
}


package pattern;
public class SpiteVoteState implements VoteState {
@Override
public void vote(String user, String voteItem, VoteManager manager) {
String s = manager.getMapVote().get(user);

if (s != null) {
manager.getMapVote().remove(user);
}

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

if (manager.getMapVoteCount().get(user) >= 7) {
manager.getMapState().put(user, new BlackVoteState());
}
}
}

package pattern;
import java.util.HashMap;
import java.util.Map;

public class VoteManager {

/**
* 记录当前每个用户对应的状态处理对象,每个用户当前的状态是不同的
* Map<String, VoteState>对应Map<用户名,当前对应的状态处理对象>
*/
private Map<String, VoteState> mapState = new HashMap<String, VoteState>();

/**
* 记录用户投票的结果,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>();

/**
* 获取记录用户投票结果的Map
* @return 记录用户投票结果的Map
*/
public Map<String, String> getMapVote() {
return mapVote;
}

/**
* 获取记录当前每个用户对应的状态处理对象
* @return
*/
public Map<String, VoteState> getMapState() {
return mapState;
}

/**
* 获取记录每个用户对应的投票次数的Map
* @return
*/
public Map<String, Integer> getMapVoteCount() {
return mapVoteCount;
}

public void vote(String user, String voteItem){
Integer oldVoteCount = mapVoteCount.get(user);
if(oldVoteCount == null){
oldVoteCount = 0;
}
oldVoteCount++;
mapVoteCount.put(user, oldVoteCount);

VoteState state = mapState.get(user);
if(state == null){
state = new NormalVoteState();
}
state.vote(user, voteItem, this);
}
}

package pattern;
public class Client {
public static void main(String[] args) {
VoteManager manager = new VoteManager();

for (int i = 0; i < 8; i++) {
manager.vote("JOE", "A");
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值