编程是一门技术,更加是一门艺术。
//计算接口
public interface Operation {
public double getResult(double _numberA, double _numberB);
}
//加法运算
public class OperationAdd implements Operation {
@Override
public double getResult(double _numberA, double _numberB) {
return _numberA + _numberB;
}
}
//减法运算
public class OperationSub implements Operation {
@Override
public double getResult(double _numberA, double _numberB) {
return _numberA - _numberB;
}
}
//乘法运算
public class OperationMul implements Operation {
@Override
public double getResult(double _numberA, double _numberB) {
return _numberA * _numberB;
}
}
//除法运算
public class OperationDiv implements Operation {
@Override
public double getResult(double _numberA, double _numberB) {
if (_numberB == 0) {
throw new RuntimeException("除数B不能为0.");
}
return _numberA / _numberB;
}
}
//运算类工厂
public class OperationFactory {
Operation oper = null;
public Operation createOperate(String operate) {
switch (operate) {
case "+":
oper = new OperationAdd();
break;
case "-":
oper = new OperationSub();
break;
case "*":
oper = new OperationMul();
break;
case "/":
oper = new OperationDiv();
break;
default:
break;
}
return oper;
}
}
import java.util.Scanner;
//简单工厂模式实现计算器
public class Calculator {
public static void main(String[] args) {
double numberA = 0d;
double numberB = 0d;
String operate = "";
double result = 0d;
try {
Scanner sc = new Scanner(System.in);
System.out.println("Java简单工厂模式计算器:");
System.out.println("请输入数字A:");
numberA = sc.nextDouble();
System.out.println("请选择运算符号(+、-、*、/):");
operate = sc.next();
System.out.println("请输入数字B:");
numberB = sc.nextDouble();
Operation operation = new OperationFactory().createOperate(operate);
if (operation == null) {
System.out.println("请在“+、-、*、/”选择正确的运算符");
} else {
result = operation.getResult(numberA, numberB);
System.out.println(String.format("您的计算结果是:%s %s %s = %s", numberA, operate, numberB, result));
}
sc.close();
} catch (Exception e) {
System.out.println(String.format("您的输入有误:%s", e.getMessage()));
}
}
}
Important:
- 通过封装、继承、多态把程序的耦合度降低。
- 用设计模式使得程序更加的灵活,容易修改,并且易于复用。
- UML类图(三层):
第一层显示类的名称,如果是抽象类,则就用斜体显示。
第二层是类的特性,通常就是字段和属性。
第三层是类的操作,通常是方法或行为。
注意:前面的符号,’+‘表示public,’-‘表示private,’#'表示protected。 - 聚合(Aggregation)表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。【空心的菱形+实线箭头】
- 合成(Composition,也‘组合’)表示一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。【实心的菱形+实线箭头】
- 依赖关系(Dependency)【虚线箭头】