比武时,你用拳,我也用拳,你用剑,我也用剑;你用枪,我也用枪。那么这个例子,如下代码:
package pattern;
abstract class Handler{
String name;
Handler next;
boolean judgeWeapon(String name){
if(this.name.equals(name))
return true;
return false;
}
}
class HandlerFist extends Handler{
public HandlerFist(){
name = "拳头";
}
}
class HandlerSword extends Handler{
public HandlerSword(){
name = "剑";
}
}
class HanderGun extends Handler{
public HanderGun(){
name = "枪";
}
}
class Sender{
private String name;
public Sender(String name){
this.name = name;
}
public String getName(){
return name;
}
}public class Responsibility {
public static void main(String[] args) {
Sender sender = new Sender("剑");
}
}大家帮我完善一下。
package pattern;
abstract class Handler{
String name;
Handler next;
boolean judgeWeapon(String name){
if(this.name.equals(name))
return true;
return false;
}
}
class HandlerFist extends Handler{
public HandlerFist(){
name = "拳头";
}
}
class HandlerSword extends Handler{
public HandlerSword(){
name = "剑";
}
}
class HanderGun extends Handler{
public HanderGun(){
name = "枪";
}
}
class Sender{
private String name;
public Sender(String name){
this.name = name;
}
public String getName(){
return name;
}
}public class Responsibility {
public static void main(String[] args) {
Sender sender = new Sender("剑");
}
}大家帮我完善一下。
if(this.name.equals(otherName))
return true;
if(next!=null)
return next.judgeWeapon(otherName);//Call next hadler
return false;
}
public static void main(String[] args) {
Sender sender = new Sender("剑");
Handler h = new HandlerFist();
h.next = new HandlerSword();
h.next.next = new HanderGun();
Responsibility r = new Responsibility(h);
System.out.println(r.response(sender));
}
Handler handler;
public Responsibility(Handler handler) {
this.handler = handler;
} public String response(Sender sender) {
Handler h = handler;
while (h != null) {
if (h.judgeWeapon(sender.getName())) {
return h.name; //h.getName() is better
}
h = h.next;
}
return "no such warpon";
}
}
abstract class Handler{
String name;
void judgeWeapon(HandlerChain chain, name){
if (this.name.equals(name)) {
//TODO
} else {
//TODO
}
//继续执行责任链
chain.handler(name);
}
}
class HandlerFist extends Handler{
public HandlerFist(){
name = "拳头";
}
}
class HandlerSword extends Handler{
public HandlerSword(){
name = "剑";
}
}
class HanderGun extends Handler{
public HanderGun(){
name = "枪";
}
}
class HandlerChain {
private int currentHandlerIndex = -1;
private List<Handler> handlers = new ArrayList<Handler>();
void addHandler(Handler handler) {
handlers.add(handler);
}
void handler(String name) {
if (currentHandlerIndex < handlers.size() - 1) {
handlers.get(++currentHandlerIndex).judgeWeapon(this, name);
}
}
}public class Responsibility {
public static void main(String[] args) {
HandlerChain chain = new HandlerChain();
chain.addHandler(new HandlerFist());
chain.addHandler(new HandlerSword());
chain.addHandler(new HanderGun());
chain.handler("剑");
}
}
String name;
Handler next;
public void addNext(Handler n) {
next = n;
} boolean judgeWeapon(String name) {
if (this.name.equals(name)) {
System.out.println("I use :" + this.name);
return true;
}
//传给后面个,如果后面还有任务处理者的话
if (next != null) {
return next.judgeWeapon(name);
} else {
System.out.println("Enemy is monster...");
return false;
}
}
}class HandlerFist extends Handler {
public HandlerFist() {
name = "拳头";
}
}class HandlerSword extends Handler {
public HandlerSword() {
name = "剑";
}
}class HanderGun extends Handler {
public HanderGun() {
name = "枪";
}
}class Sender {
private String name;
public Sender(String name) {
this.name = name;
} public String getName() {
return name;
}
}class Responsibility {
public static void main(String[] args) {
Sender sender = new Sender("剑");
//按自己的顺序组装任务链
HanderGun hg = new HanderGun();
HandlerSword hs = new HandlerSword();
HandlerFist hf = new HandlerFist();
hf.addNext(hs);
hs.addNext(hg);
//从责任链头部开始处理任务
hf.judgeWeapon(sender.getName());
}
}
HandlerSword hs = new HandlerSword();
HandlerFist hf = new HandlerFist();
hf.addNext(hs);
hs.addNext(hg);这个代码不是责任链
责任链是在内部实现链接的,UML说明图中来的。
String name;
Handler next; public Handler(Handler n) {
next = n;
}
...
}class HandlerFist extends Handler {
public HandlerFist(Handler n) {
super(n);
name = "拳头";
}
}.........class Responsibility {
public static void main(String[] args) {
Sender sender = new Sender("剑");
//按自己的顺序组装任务链
Handler hg = new HanderGun(null);
Handler hs = new HandlerSword(hg);
Handler hf = new HandlerFist(hs);
//从责任链头部开始处理任务
hf.judgeWeapon(sender.getName());
}
}