首页 > 代码库 > 大话设计模式第一章之简单工厂模式
大话设计模式第一章之简单工厂模式
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表示类之间的关系更能表达现实生活中类之间的关系。
继承和实现就不说了 两者没什么区别
关联
企鹅和气候是一种关联关系,企鹅需要了解天气是怎么样的,根据天气作出他们的行为(就好像人和天气是关联的,我们要知道天气怎么样)
聚合
一种弱的拥有关系,比如雁群中有大雁,但某一只大雁可以不在雁群中。
组合
一种强的又有关系,比如头是一个类,那么嘴巴 耳朵和头都是组合的关系,无法分离
依赖 动物新陈代谢依赖于氧气和水,没有氧气和水,动物就会死亡
大话设计模式第一章之简单工厂模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。