Question: How do you achieve the functions of calculator by Object-Oriented ?

Analysis:

1,The function of calculator consists of 4 basic operations:Plus, Substraction, Multify, Division. Generally speaking, we can put the 4 operations into one Java class, but this doesn't accord with the thinking of Object-Oriented in Java. Some reasons I will share with you as following.

Firstly, now we have 4 basic operations, if we need to add some extra operations, you could do nothing but updating the class you have finished, it's not reasonable.If we put the service code mixed with the business logictic layer code, it's not the thinking of Object-Oriented.

What's the Object-Oriented?

Firstly,in java programing, you have to know  the three basic typical characteristics:Encapsulation,Inheritance,Polymorphism.

Encapsulation: we encapsulate the properties of one Object by 'private', in other classes, you can't reach access to this class directly.But if you want to gain access to these properies which you have defined the setter and getter methods, you can call on it by the methods.

Inheritance : This characteristic means that  the subclass can  extend the non-private  properties and non-private methods. You can use the properties or methods directly which are in the superclass, and you can also overwrite the methods in the subclass.

Polymorphism:This characteristic is very important in java programming.Here has  three preconditions about the Polymorphism.

1: relationship between subclass and superclass. This means the subclass must extend the superclass.

2: the superclass must overwrite the functions from the superclass.

3:object reference of superclass must appoint to the object of subclass.

So, by the Inheritance, in this example ,we can define A class of 'Operation',which have two private properties :numberA and numberB,and a public general function of getting result by input parameters of numberA and numberB,this is a superclass.

public class Operation {  

  public double numberA = 0.0;  

  public double numberB = 0.0; 

  public Operation(){     }  

  public Operation(double numberA,double numberB){   

        this.numberA = numberA;  

         this.numberB = 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 double getResult() throws Exception{   

  double result = 0.0;     

 return result;

  }

}

Next, you can define some subclasses such as plus, substraction, multify and division and extend to the superclass respectively. Then in every class, you can overwirte the function of  'getResult' and give them specific function.If this class will be used to make the calculation of adding, you can achieve the function in it by using numberA and numberB, make them do the plus.Similarly,you can finish the functions of substraction,multify,division.

Factory? Generally speaking, it's a class to Instantiate the object, according to the principle of Polymorphism, it can instantiate some different objects  which have ths functions of supeerclass. So in this class, we can define a static method with a parameter which stand for the different different operation.

public class Factory {

 public static Operation createOperation(String operator) {   

       Operation oper = null;   

       switch (operator) {   

       case "+":    oper = new Add(); 

       break;   

       case "——":    

       oper = new Subtraction();   

       break;   

       case "*":

       oper = new Mul();   

       break;   

       case "/":   

       oper = new Div();   

       break;  

      }   

   return oper;

  }

}

Speaking of which, the simple factory have been almost built already.

Simple Factory Pattern的更多相关文章

  1. Net设计模式实例之简单工厂模式(Simple Factory Pattern)

    一.简单工厂模式简介(Bref Introduction) 简单工厂模式(Simple Factory Pattern)的优点是,工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类, ...

  2. 【设计模式】简单工厂模式 Simple Factory Pattern

    简单工厂模式Simple Factory Pattern[Simple Factory Pattern]是设计模式里最简单的一个模式,又叫静态工厂模式[Static Factory Pattern], ...

  3. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  4. 大白话简单工厂模式 (Simple Factory Pattern)

    大白话简单工厂模式 (Simple Factory Pattern) 从买车经历说起 毕业两年,码农张小两口无法忍受挤公交,凌晨起床抢火车票的痛苦,遂计划买车.逛了多家4S店,最终定下日产某车型的轿车 ...

  5. [转]C#设计模式(4)-Simple Factory Pattern

    工厂模式专门负责将大量有共同接口的类实例化.工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类.工厂模式有以下几种形态: 简单工厂(Simple Factory)模式 工厂方法(F ...

  6. 六个创建模式之简单工厂模式(Simple Factory Pattern)

    定义: 定义一个工厂类,它可以根据参数的不同生成对应的类的实例:被创建的类的实例通常有相同的父类.因为该工厂方法尝尝是静态的,所以又被称为静态工厂方法(Static Factory Method) 结 ...

  7. 简单工厂模式(Simple Factory Pattern)

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂 ...

  8. 【java设计模式】【创建模式Creational Pattern】简单工厂模式Simple Factory Pattern(静态工厂方法模式Static Factory Method Pattern)

    public class Test { public static void main(String[] args){ try{ Factory.factory("A").doSt ...

  9. 简单工厂模式(Simple Factory Pattern)

    简单工厂模式概述 定义:定义一个工厂类,他可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类 在简单工厂模式中用于被创建实例的方法通常为静态(static)方法,因此简单工厂模式又被 ...

随机推荐

  1. python中栈的单链表实现

    参考博客:https://www.cnblogs.com/stacklike/p/8284550.html 基于列表的简单实现 # 先进后出 # 以列表实现的简单栈 class SimpleStack ...

  2. BOM 浏览器对象模型_window.navigator

    window.navigator 对象 包含浏览器和系统信息的 Navigator 对象. 通过这个属性 了解用户的环境信息 window.navigator.userAgent 返回浏览器的 Use ...

  3. vue_实例_组件的生命周期

     重绘重排 中重复出现的是 mounted(){...} beforeUpdate(){...} uptated(){...} 其他钩子函数只会出现一次 <!DOCTYPE html> & ...

  4. 基于贝叶斯算法实现简单的分类(java)

    参考文章:https://blog.csdn.net/qq_32690999/article/details/78737393 项目代码目录结构 模拟训练的数据集 核心代码 Bayes.java pa ...

  5. 微信小程序填坑之page[pages/XXX/XXX] not found.May be caused by

    当页面出现   page[pages/XXX/XXX] not found.May be caused by :1. Forgot to add page route in app.json.2. I ...

  6. F#周报2019年第15期

    新闻 Hedgehog新站点 Bolero 0.4发布,增加远程认证 FsToolkit.ErrorHandling与Cvdm.ErrorHandling合并了 F#里的3D图形编程与游戏开发 有趣的 ...

  7. postman自动化,测试脚本

    //获取当前时间的时间戳 function getTimestamp(len=10) { // 如果需要自动获取则将此处代码放开 // var tmp = Date.parse( new Date() ...

  8. ZPW-2000电气绝缘移频轨道电路

    1.该轨道电路是个什么样子?(图片) 整个轨道电路不仅都在室外,其中还包括室内设备.其中室内设备包括发送器.接收器和衰耗盒.室内设备和室外设备通过一根电缆相连. 机柜 2.移频轨道电路有什么作用? z ...

  9. OO第一单元总结与心得体会

    一.结构度量 1. UML类图 第一次作业 第二次作业 第三次作业 2. 复杂度分析 (1)方法复杂度 ​ ev, iv, v这几栏,分别代指基本复杂度(Essential Complexity (e ...

  10. MongoDB - 2

    Aggregation Framework: $project: a document stream by renaming, adding, or removing fields #alter Da ...