📄 m_cor.java
字号:
/*
CHAIN OF RESPONSIBLEITY—晚上去上英语课,为了好开溜坐到了最后一排,哇,前面坐了好几个漂亮的MM哎,找张纸条,写上“Hi,可以做我的女朋友吗?如果不愿意请向前传”,纸条就一个接一个的传上去了,糟糕,传到第一排的MM把纸条传给老师了,听说是个老处女呀,快跑!
责任链模式:在责任链模式中,很多对象由每一个对象对其下家的引用而接
起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。客户并不知道链上的哪一个对象最终处理这个请求,系统可以在不影响客户端的情况下动态的重新组织链和分配责任。处理者有两个选择:承担责任或者把责任推给下家。一个请求可以最终不被任何接收端对象所接受。
CoR的优点:
因为无法预知来自外界(客户端)的请求是属于哪种类型,每个类如果碰到它不能处理的请求只要放弃就可以。
缺点是效率低,因为一个请求的完成可能要遍历到最后才可能完成,当然也可以用树的概念优化。 在Java AWT1.0中,对于鼠标按键事情的处理就是使用CoR,到Java.1.1以后,就使用Observer代替CoR
扩展性差,因为在CoR中,一定要有一个统一的接口Handler.局限性就在这里。
*/
class M_CoR{
public static void main(String argsd[]){
LoveHigh a=new LoveHigh("alice");
LoveMature b=new LoveMature("rose");
LoveMature c=new LoveMature("lily");
a.setNext(b);
b.setNext(c);
a.observe(new Boy());
}
}
class LoveMature extends Lover{
public LoveMature(String name){
super(name);
}
public boolean love(Boy b){
if (b.getAge()>25){
return true;
}
else{
return false;
}
}
}
class LoveHigh extends Lover{
public LoveHigh(String name){
super(name);
}
public boolean love(Boy b){
if (b.getHeight()>180){
return true;
}
else{
return false;
}
}
}
class Boy {
private float height=176;
private float weight=67;
private int age=29;
public float getHeight(){
return this.height;
}
public float getWeight(){
return this.weight;
}
public float getAge(){
return this.age;
}
}
abstract class Lover{
private String name;
private Lover next;
public Lover(String name){
this.name=name;
}
public void setNext(Lover next){
this.next=next;
}
public void observe(Boy b){
if (love(b)){
this.ok();
}
else{
this.fail();
if(next!=null)
this.next.observe(b);
}
}
public abstract boolean love(Boy b);
public void ok(){
System.out.println(name+"喜欢哦");
}
public void fail(){
System.out.println(name+"不喜欢");
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -