使用面向对象程序设计方法完成如下设计:
设计复数类Complex,包含类成员变量实部和虚部,方法包括构造方法和输出复数的方法。
设计接口Computable,包含抽象方法compute(Complex a, Complex b)。
设计4个类Add、Sub、Mul和Div,分别实现接口Computable,完成复数的加、减、乘、除运算。
设计类Computer,包含方法useCompute(Computable c, Complex a, Complex b),进行运算并输出结果。
在主方法中调用Computer类的对象的useCompute()方法进行测试。
// 复数类
public class Complex {
private double real;
private double imag;
public Complex(double real, double imag) {
this.real = real;
this.imag = imag;
}
public double getReal() {
return real;
}
public double getImag() {
return imag;
}
@Override
public String toString() {
return real + " + " + imag + "i";
}
}
// Computable接口
public interface Computable {
Complex compute(Complex a, Complex b);
}
// 加法类
public class Add implements Computable {
@Override
public Complex compute(Complex a, Complex b) {
return new Complex(a.getReal() + b.getReal(), a.getImag() + b.getImag());
}
}
// 减法类
public class Sub implements Computable {
@Override
public Complex compute(Complex a, Complex b) {
return new Complex(a.getReal() - b.getReal(), a.getImag() - b.getImag());
}
}
// 乘法类
public class Mul implements Computable {
@Override
public Complex compute(Complex a, Complex b) {
double real = a.getReal() * b.getReal() - a.getImag() * b.getImag();
double imag = a.getReal() * b.getImag() + a.getImag() * b.getReal();
return new Complex(real, imag);
}
}
// 除法类
public class Div implements Computable {
@Override
public Complex compute(Complex a, Complex b) {
double denominator = b.getReal() * b.getReal() + b.getImag() * b.getImag();
double real = (a.getReal() * b.getReal() + a.getImag() * b.getImag()) / denominator;
double imag = (a.getImag() * b.getReal() - a.getReal() * b.getImag()) / denominator;
return new Complex(real, imag);
}
}
// Computer类
public class Computer {
public void useCompute(Computable c, Complex a, Complex b) {
Complex result = c.compute(a, b);
System.out.println("Result: " + result);
}
}
// 主方法
public class Main {
public static void main(String[] args) {
Complex a = new Complex(1, 2);
Complex b = new Complex(3, 4);
Computer computer = new Computer();
computer.useCompute(new Add(), a, b); // 加法
computer.useCompute(new Sub(), a, b); // 减法
computer.useCompute(new Mul(), a, b); // 乘法
computer.useCompute(new Div(), a, b); // 除法
}
}