package com.dp.simpleFactory; //计算器作为抽象类 定义一个计算需要什么 子类继承了两个数字 并且要有自己的计算实现方法 public abstract class Calculator { protected double numberA=0; protected double numberB=0; public double getNumberA() { return numberA; } public void setNumberA(double numberA) { this.numberA = numberA; } public double getNumberB() { return numberB; } public void setNumberB(double numberB) { this.numberB = numberB; } public abstract double getResult() throws Exception; } class CalculatorAdd extends Calculator { @Override public double getResult() { double result=numberA+numberB; return result; } } class CalculatorMinus extends Calculator { @Override public double getResult() { double result=numberA-numberB; return result; } } class CalculatorMultiply extends Calculator { @Override public double getResult() { double result=numberA*numberB; return result; } } class CalculatorDivide extends Calculator { @Override public double getResult() throws Exception { double result=numberA/numberB; if(numberB==0) throw new Exception("除数不能为0"); return result; } } //问题是:怎么根据输入而得到指定的类? //使用简单工厂设计模式 根据操作符得到某个类(根据xx条件得到XX类) class CalculatorFactory { public static Calculator createCalculator(String operate) { Calculator cal=null; switch(operate) { case "+": cal=new CalculatorAdd(); break; case "-": cal=new CalculatorMinus(); break; case "*": cal=new CalculatorMultiply(); break; case "/": cal=new CalculatorDivide(); break; } return cal; } }
package com.dp.simpleFactory; import java.util.Scanner; /** * 客户端 * * */ public class Client { public static void main(String[] args) { Scanner in=new Scanner(System.in); System.out.println("请输入数字A"); String numberA=in.next(); System.out.println("请输入运算符号(ex:+ - * /)"); String operate=in.next(); System.out.println("请输入数字B"); String numberB=in.next(); //根据输入的符号得到具体的实现子类 使用到多态 Calculator cal=CalculatorFactory.createCalculator(operate); cal.setNumberA(Double.parseDouble(numberA)); cal.setNumberB(Double.parseDouble(numberB)); double result=0; try { result = cal.getResult(); } catch (Exception e) { System.out.println("除数不能为0"); } System.out.println(result); } }
UML类图:
书中给的一些关于UML图的用法:
在core java一书中作者说到类之间的关系只有三种,一种是关联(has a ) 一种是依赖(use a) 一种是继承(is a) 但是这样分可能在UML中还难以表达。
我想既然是面向对象那么只用三种方式描述是不够严谨的,UML表示类之间的关系更能表达现实生活中类之间的关系。
继承和实现就不说了 两者没什么区别
关联
企鹅和气候是一种关联关系,企鹅需要了解天气是怎么样的,根据天气作出他们的行为(就好像人和天气是关联的,我们要知道天气怎么样)
聚合
一种弱的拥有关系,比如雁群中有大雁,但某一只大雁可以不在雁群中。
组合
一种强的又有关系,比如头是一个类,那么嘴巴 耳朵和头都是组合的关系,无法分离
依赖 动物新陈代谢依赖于氧气和水,没有氧气和水,动物就会死亡
时间: 2024-12-09 02:01:53