大话设计模式-Java实现(1)-简单工厂模式

编程是一门技术,更加是一门艺术。

//计算接口
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)【虚线箭头】
发布了53 篇原创文章 · 获赞 33 · 访问量 1269

猜你喜欢

转载自blog.csdn.net/qq_44458489/article/details/104841550