最近在研究二十三种设计模式,今天看到了责任链模式,有篇博文里提到了击鼓传花的游戏和这个设计模式很是相似,就随手写了一些代码模拟了这个场景。废话不多说,上代码
先创建一个抽象处理者类
package com.zzy.responsibility;
public abstract class Handle {
private Handle handle;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 获取当前请求
* @return
*/
public Handle getHandle() {
return handle;
}
/**
* 设置下一个请求
* @param handle
*/
public void setHandle(Handle handle) {
this.handle = handle;
}
/**
* 处理当前请求的方法
*/
public abstract void handleRequest(long time);
}
然后是具体处理者类
package com.zzy.responsibility;
public class ConcreteHandler extends Handle {
//设置击鼓传花的时间为10秒
private final long time = 10000;
@Override
public void handleRequest(long last) {
//设置每个人拿到酒杯的时间,大约在1到2秒
double random = Math.random()+1;
int v = (int) (random * 1000);
long now = System.currentTimeMillis();
if(getHandle() != null && now - last <= time) {
System.out.println(getHandle().getName()+"传递给下一个人");
try {
Thread.sleep(v);
} catch (InterruptedException e) {
e.printStackTrace();
}
long thisTime = System.currentTimeMillis();
getHandle().handleRequest(last);
}else {
System.out.println(getHandle().getName()+"暂停传递,来喝一杯酒");
}
}
}
最后是客户端类
package com.zzy.responsibility;
public class Client {
public static void main(String[] args) {
Handle person1 = new ConcreteHandler();
person1.setName("张三");
Handle person2 = new ConcreteHandler();
person2.setName("王五");
Handle person3 = new ConcreteHandler();
person3.setName("李二");
Handle person4 = new ConcreteHandler();
person4.setName("赵四");
Handle person5 = new ConcreteHandler();
person5.setName("王六");
person1.setHandle(person2);
person2.setHandle(person3);
person3.setHandle(person4);
person4.setHandle(person5);
person5.setHandle(person1);
long now = System.currentTimeMillis();
person5.handleRequest(now);
}
}
输出结果
张三传递给下一个人
王五传递给下一个人
李二传递给下一个人
赵四传递给下一个人
王六传递给下一个人
张三传递给下一个人
王五暂停传递,来喝一杯酒
作为一个java小菜鸟还是要多多努力呀
本文通过代码示例介绍了如何运用设计模式中的责任链模式来模拟击鼓传花游戏。首先定义了一个抽象处理者类,接着创建了具体的处理者类,最后在客户端类中组合并执行这些处理者,输出了相应的结果。此示例帮助理解责任链模式的应用。
656

被折叠的 条评论
为什么被折叠?



