博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
简单工厂模式
阅读量:6836 次
发布时间:2019-06-26

本文共 2420 字,大约阅读时间需要 8 分钟。

《大话设计模式》阅读笔记和总结。原书是C#编写的,本人用Java实现了一遍,包括每种设计模式的UML图实现和示例代码实现。

目录:
Github地址:

定义:通过一个单独的类来做创造实例的过程,这就是工厂

例子:用程序实现输入两个数和运算符号,得到结果。

分析:这个题目并不难,需要考虑的是需要通过面向对象编程来简化代码,降低耦合度,同时又便于修改和复用。因此这里我们用简单工程模式来实现这个功能。

UML图:

img_af871758812d19f2e8190ea07a60a32b.png
简单工厂模式UML图.png

代码:

运算类

public abstract class Operation {    private double numberA;    private double numberB;    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();}

加法类,继承运算类

public class OperationAdd extends Operation {    @Override    public double getResult() {        double result = getNumberA() + getNumberB();        return result;    }}

减法类,继承运算类

public class OperationSub extends Operation {    @Override    public double getResult() {        double result = getNumberA() - getNumberB();        return result;    }}

乘法类,继承运算类

public class OperationMul extends Operation {    @Override    public double getResult() {        double result = getNumberA() * getNumberB();        return result;    }}

除法类,继承运算类

public class OperationDiv extends Operation {    @Override    public double getResult(){        double result = 0;        try {            if (getNumberB() == 0){                throw new Exception("除数不能为0");            }else {                result = getNumberA() / getNumberB();            }        } catch (Exception e) {            e.printStackTrace();        }        return result;    }}

简单运算工厂类

public class OperationFactory {    public static Operation createOperation(String operate){        Operation oper = null;        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;    }}

客户端调用

public class Main {    public static void main(String[] args){        Operation oper = OperationFactory.createOperation("*");        oper.setNumberA(5);        oper.setNumberB(3);        double result = oper.getResult();        System.out.println(result);    }}

转载地址:http://xchkl.baihongyu.com/

你可能感兴趣的文章
推荐一个非常好用的Chrome扩展应用,用于美化Json字符串
查看>>
模板方法模式
查看>>
CSS------当内容超出div宽度后自动换行和限制文字不超出div宽度和高度
查看>>
MySQL优化系列(二)--查找优化(1)(非索引设计)
查看>>
提高WPF程序性能的几条建议
查看>>
nginx常用功能全揭秘
查看>>
Spark(四) -- Spark工作机制
查看>>
CSS3中的选择器
查看>>
追求极致的AI·OS——AI·OS引擎平台
查看>>
Spark PruneDependency 依赖关系 RangePartitioner
查看>>
Java与Excel的交互!-
查看>>
使用 WebIDE 三分钟上手函数计算
查看>>
一. synchronized 的局限性 与 Lock 的优点
查看>>
大龄码农经验那么丰富,为什么很多公司都不招?
查看>>
一辈子不用考试?你可能是个假程序员
查看>>
利用WSS搭建学生作业平台
查看>>
刚进入win7系统就提示检测到一个硬盘问题的解决方法
查看>>
Python之配置日志模块logging
查看>>
指定目录的所有 *.gif 文件都重命名为 *.jpg
查看>>
为11.2.0.2 Grid Infrastructure添加节点
查看>>