设计模式:职责链模式

职责链模式

分析

定义:职责链模式可以把响应请求的对象组成一条链,并在这条链上传递请求,从而保
证多个对象都有机会处理请求并可以避免请求方和响应方的紧密耦合。

职责链上的角色:

  • Handle:抽象处理者,定义请求处理 方法,维护继任者引用
  • ConcreteHandler:对具体请求进行处理

在这里插入图片描述

案例:匹配运算符

//Handle
public abstract class CalcUnit {
private CalcUnit next = null;
public abstract boolean fit(String operator);
public abstract double calc(double x, double y);
public CalcUnit(CalcUnit next){
this.next = next;
}
public double handle(String operator) throws Exception{
if(fit(operator)){
double x,Scanner input = new Scanner(System.in);
System.out.print("arg1: ");
x = input.nextDouble();
System.out.print("arg2: ");
y = input.nextDouble();
return calc(x, y);
}else if(next!=null){
return next.handle(operator);
}
else{
throw new Exception("没有找到合适的处理");
}
};
}
//ConcreteHandler
public class CalcPuls extends CalcUnit{
public CalcPuls(CalcUnit next){
super(next);
}
@Override
public boolean fit(String operator) {
return operator.equals("+");
}
@Override
public double calc(double x, double y) {
return x +}
}
public class CalcDIvide extends CalcUnit{
public CalcDIvide(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator) {
return operator.equals("/");
}
@Override
public double calc(double x, double y) {
return x /}
}
public class CalcMinus extends CalcUnit{
public CalcMinus(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator) {
return operator.equals("-­");
}
@Override
public double calc(double x, double y) {
return x -}
}
public class CalcTimes extends CalcUnit{
public CalcTimes(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator) {
return operator.equals("*");
}
@Override
public double calc(double x, double y) {
return x *}
}
//Client
public class Client {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
CalcUnit calculator = new CalcPuls(new CalcMinus(new
CalcTimes(new CalcDIvide(null))));//职责链
while(true) {
System.out.print("输入:");
String commond = input.nextLine().trim();
if(commond.equals("exit")) {
break;
}
try {
System.out.println("计算结果:" +
calculator.handle(commond));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
input.close();
}
}

super:调用父类方法/构造器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值