首页 > 其他分享 >大话设计模式之简单工厂模式笔记

大话设计模式之简单工厂模式笔记

时间:2023-10-20 17:58:24浏览次数:34  
标签:numberB numberA double 大话 System 笔记 println 设计模式 out

简单工厂模式

以实现加、减、乘、除的计算器功能为例

初级代码:

输入数字交互界面

@SuppressWarnings("resource")
    public static void main(String[] args) {

        System.out.println("**********************************************");
        System.out.println("《大话设计模式》代码样例");
        System.out.println();

        try {
            Scanner sc = new Scanner(System.in);

            System.out.println("请输入数字A:");
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("请选择运算符号(+、-、*、/):");
            String strOperate = sc.nextLine();
            System.out.println("请输入数字B:");
            double numberB = Double.parseDouble(sc.nextLine());

            double result = getResult(numberA, numberB, strOperate);

            System.out.println("结果是:" + result);
        } catch (Exception e) {
            System.out.println("您的输入有错:" + e.toString());
        }

        System.out.println();
        System.out.println("**********************************************");

    }

运算方法:

public static double getResult(double numberA, double numberB, String operate) {
        double result = 0d;
        switch (operate) {
            case "+":
                result = numberA + numberB;
                break;
            case "-":
                result = numberA - numberB;
                break;
            case "*":
                result = numberA * numberB;
                break;
            case "/":
                result = numberA / numberB;
                break;
            case "pow":
                result = java.lang.Math.pow(numberA, numberB);
                break;
        }
        return result;
    }

缺陷:无法做到灵活的可修改和扩展

比如说加个其他运算,导致需要重新修改运算方法 且需要把加减乘除的代码重新编译一遍;且如果不小心改了其他方法,程序会出现问题,给程序带来了风险;

好的代码应该是,修改其中一个不影响另外的几个,增加运算算法也不影响其它代码;

高级写法:

思路:

到底要实例化谁,将来会不会增加实例化的对象,也就是说会不会增加运算符,这是很容易变化的地方,应该考虑用一个单独的类来做这个创造实例的过程,这就是工厂

classDiagram class Operation{ <<abstract>> +double numberA +double numberB +double getResult() } class OperationAdd{ +double getResult() } class OperationSub{ +double getResult() } class OperationFactory { +Operation createOperation(String operator) } class interactionView { main(String[] args) } interactionView o-- OperationFactory : createOperation OperationFactory o-- Operation Operation <|-- OperationAdd Operation <|-- OperationSub

输入数字交互界面:

public static void main(String[] args){

        System.out.println("**********************************************");       
        System.out.println("《大话设计模式》代码样例");
        System.out.println();       

        try {
            Scanner sc = new Scanner(System.in);

            System.out.println("请输入数字A:");  
            double numberA = Double.parseDouble(sc.nextLine());
            System.out.println("请选择运算符号(+、-、*、/):");    
            String strOperate = sc.nextLine();
            System.out.println("请输入数字B:");  
            double numberB = Double.parseDouble(sc.nextLine());

            Operation oper = OperationFactory.createOperate(strOperate);

            double result = oper.getResult(numberA,numberB);

            System.out.println("结果是:"+result);  
        }
        catch(Exception e){
            System.out.println("您的输入有错:"+e.toString()); 
        }

        System.out.println();
        System.out.println("**********************************************");

    }

工厂类

public class OperationFactory {

    public static Operation createOperate(String operate){
        Operation oper = null;
        switch (operate) {
            case "+":
                oper = new Add();
                break;
            case "-":
                oper = new Sub();
                break;
            case "*":
                oper = new Mul();
                break;
            case "/":
                oper = new Div();
                break;
        }
        return oper;
    }

}

抽象化运算类

public abstract class Operation {

    public double getResult(double numberA, double numberB){
        return 0d;
    }

}

public class Add extends Operation {

    public double getResult(double numberA, double numberB){
        return numberA + numberB;
    }

}

标签:numberB,numberA,double,大话,System,笔记,println,设计模式,out
From: https://www.cnblogs.com/lixiuming521125/p/17772998.html

相关文章

  • 算法学习笔记(31): 李超线段树
    李超线段树是一种按照值域维护一次函数最值的数据结构,其核心在于一次函数和值域的双单调性。如果预先对于值域离散也可以维护其最值。也就是说只要满足时一次函数,以及下标的单调性都可以利用李超线段树维护。李超线段树就是利用线段树来维护一次函数的最值,每一个结点对应了一......
  • ansible学习笔记
    ansible目录ansible安装1.配置1.1Inventory(主机清单)1.2ansible.cfg2.模块2.1yum模块2.2copy模块2.3get_url模块2.4fetch模块2.5file模块2.6service模块2.7group模块2.8user模块2.9cron模块2.10mount模块2.11firewalld模块2.12command/shell/raw模块2.13script......
  • CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属
    CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表(CascadingStyleSheets)。下面是一些常用的CSS3属性及其详细解释:border-radius:设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径,也可以只使用一个值来设置统一的圆角。box-shadow:创建一个元素的阴影效果......
  • HTML5+CSS3+移动web 前端开发入门笔记(一)
    千古前端图文教程千古前端图文教程git的使用Git是一个分布式版本控制系统,它的作用主要包括以下几个方面:版本管理:Git可以跟踪文件的修改历史,记录每次提交的内容、时间和作者等信息。通过Git,开发人员可以轻松地查看和比较不同版本之间的差异,回滚到历史版本或者创建新的分支。多人协作......
  • 设计模式?
    设计模式只是针对重复出现的问题的通用设计解决方案。与其一遍又一遍地解决相同的问题,不如想到一种每次遇到相同问题时都可以使用的解决方案,并且这些解决方案已经找到了!幸运的是,有人已经想到让我们的生活更轻松!:)设计模式有多种不同。但我们主要有3个:创造:它是关于创建对象的过程......
  • 麒麟系统开发笔记(十三):在国产麒麟系统上编译OSG库、搭建基础开发环境和移植测试Demo
    前言  在国产麒麟系统上实现C++三维仿真,使用OSG技术,其他基于web的技术也是可以但是交互上鼠标拽托等交互相对差一些,所以这块需要斟酌选择到底是何种技术来取舍。  本篇在厂家指定的麒麟系统上编译OSG。 环境系统版本:银河麒麟桌面操作系统V10(SP1)(注意:不对外提供)......
  • React学习笔记12-循环渲染
    在vue中我们一般是通过v-for指令来进行循环渲染的,但react中没有封装相关指令供我们调用在react中我们可以通过数组的map方法来进行数据的循环渲染importReact,{Component}from'react'exportdefaultclassAppextendsComponent{constructor(){super(......
  • React学习笔记11-状态(state)
    状态就是组件的数据,由组件自己设置和更改,也就是说由组件自己维护,使用状态的目的就是为了在不同的状态下使组件的显示不同(自己管理) 定义状态的方法 可以在构造函数中定义也可以直接在类中通过变量的形式来定义/*eslint-disableeqeqeq*/importReact,{Component}f......
  • 学习笔记
    学习“红色飓风2笔记”1,ISE中也可以完成仿真啊,参见3s400试验指导书P27.2,增加约束:  时序约束:约束设计的时序和时钟频率,双击CreateTimingConstraints:   上面的对话框里面有四个复选页:    Global:用于附加全局约束,包括周期约束,输入延迟约束和输出延迟约束    Ports:附加......
  • 备份项目 备份思路 备份学习笔记
    1,有一天突然发现自己以前做的项目,一个报告啊,源代码都不见了,自己要找一个小东西都找不到,特别有一些东西,想用一个东西,而以前是做过的,发现源代码找不到了,特懊恼,其实也花不了多少时间就能够把哪些知识学回来,就是觉得特不爽。所以现在我要强力推着自己用多个邮箱备份,还好现在邮箱也越来......