前言
本文主要记录了本人在JavaSE课程中的实验项目经历
本次实验旨在通过使用职责链的概念,设计和实现一个简单的计算器。职责链( Chain of Responsibility )模式也被叫做责任链模式,在《设计模式》属于行为型模式,是一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止。 责任链模式将请求和处理分离开来,进行解耦。我们将利用职责链的特性,实现输入操作符匹配,并通过计算得出结果的基本计算功能。本实验将帮助我们加深对职责链的理解,并锻炼我们的编程技巧。
实验一、计算器简单实现
1.代码实现
-
Add.java
package myfirst;
public class Add extends CalcUnit {
public Add(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator)
{
return operator.equals("+");
}
@Override
public double calc(double x,double y)
{
return x + y;
}
}
-
Sub.java
package myfirst;
public class Sub extends CalcUnit {
public Sub(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator)
{
return operator.equals("-");
}
@Override
public double calc(double x,double y)
{
return x - y;
}
}
-
Mul.java
package myfirst;
public class Mul extends CalcUnit {
public Mul(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator)
{
return operator.equals("*");
}
@Override
public double calc(double x,double y)
{
return x * y;
}
}
-
Div.java
package myfirst;
public class Div extends CalcUnit {
public Div(CalcUnit next) {
super(next);
}
@Override
public boolean fit(String operator)
{
return operator.equals("/");
}
@Override
public double calc(double x,double y)
{
return x / y;
}
}
package myfirst;
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 CalcUnit getNext()
{
return next;
}
public double handle(String opera) throws Exception {
String[] items = opera.split(" ");
String operator =items[1];
double x =Double.parseDouble(items[0]);
double y =Double.parseDouble(items[2]);
if(fit(operator)) {
return this.calc(x, y);
}
else if (getNext()!= null) {
return getNext().handle(opera);
} else {
throw new Exception("没找到合适的处理");
}
}
}
-
Main(采用传递链)
package myfirst;
import java.util.Scanner;
public class myapp
{
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
CalcUnit Calclator = new Add(new Sub(new Mul(new Div(null))));
while(true) {
System.out.print("输入:");
String commond = input.nextLine().trim();
if(commond.equals("exit")) {
break;
}
try {
System.out.println("计算结果:" + Calclator.handle(commond));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
input.close();
}
}
2.运行结果
3.类图
总结
通过本次实验,我们成功地设计和实现了一个简单的计算器,利用职责链的概念实现了操作符匹配,并能够正确计算出结果。这个实验不仅让我们更加熟悉了职责链的使用,还提高了我们的编程能力和问题解决能力。通过这个实验,我深刻认识到了设计模式在实际应用中的重要性。