JavaOperator小框架制作【精品博客】
以下是运算小框架的制作过程,以及核心代码,完成(计算,监听,回馈等):
package com.demo2.operator;
/**
* 运算标准接口
* @author Liudeli
*/
public interface IOperator {
/**
* 设置第一个数
* @param number1
* @return
*/
public Operator setNumber1(double number1);
/**
* 设置运算符
* @param operator
* @return
*/
public Operator setOperator(String operator);
/**
* 设置第二个数
* @param number2
* @return
*/
public Operator setNumber2(double number2);
/**
* 设置运算结果
* @param onResult
* @return
*/
public Operator setOnResultListener(OnResult onResult);
/**
* 设置运算出错
* @param onError
* @return
*/
public Operator setOnErrorListener(OnError onError);
/**
* 次方法为最后提交的方法(必须最后提交调用)
*/
public void operatorCommit();
}
package com.demo2.operator;
/**
* 运算配置类
* @author Liudeli
*/
public class OperatorConfig {
/**
* 定义返回错误码(运算符输入错误)
*/
public static final int ERROR_CODE_INPUT = 4004;
/**
* 定义返回错误码(运算发生异常)
*/
public static final int ERROR_CODE_EX = 4005;
/**
* 运算默认值
*/
public static final double RESULT_DEFAUTL = 0.0;
}
package com.demo2.operator;
/**
* 运算结果接口
* @author Liudeli
*/
public interface OnResult {
/**
* 获取得到运算结果
* @param result
*/
public void result(double result);
}
package com.demo2.operator;
/**
* 次接口为运算出错接口
* @author Liudeli
*
*/
public interface OnError {
/**
* 错误码方法
* @param error
*/
public void error(int error);
}
package com.demo2.operator;
/**
* 此类为运算类的具体实现
* @author Liudeli
*/
public class Operator implements IOperator {
/**
* 定义单例模式
*/
private static Operator mOperator = null;
public static Operator getInstance() {
if (null == mOperator) {
synchronized (Operator.class) {
mOperator = new Operator();
}
}
return mOperator;
}
/**
* 此方法的用于计算两个数的值
* @param figure1 第一个数值
* @param figure2 第二个数值
* @param operator 传入运算符
* @return
*/
private double getOperatorResult(double figure1,
double figure2, String operator) {
double resultOperator = OperatorConfig.RESULT_DEFAUTL;
try {
if ("+".equals(operator)) {
resultOperator = figure1 + figure2;
} else if ("-".equals(operator)) {
resultOperator = figure1 - figure2;
} else if ("*".equals(operator)) {
resultOperator = figure1 * figure2;
} else if ("/".equals(operator)) {
resultOperator = figure1 / figure2;
} else {
onError.error(OperatorConfig.ERROR_CODE_INPUT);
}
} catch (Exception e) {
e.printStackTrace();
onError.error(OperatorConfig.ERROR_CODE_EX);
}
return resultOperator;
}
private double number1;
public Operator setNumber1(double number1) {
this.number1 = number1;
return this;
}
private String operator;
public Operator setOperator(String operator) {
this.operator = operator;
return this;
}
private double number2;
public Operator setNumber2(double number2) {
this.number2 = number2;
return this;
}
private OnResult onResult;
public Operator setOnResultListener(OnResult onResult) {
this.onResult = onResult;
return this;
}
private OnError onError;
public Operator setOnErrorListener(OnError onError) {
this.onError = onError;
return this;
}
public void operatorCommit() {
double operatorResult = getOperatorResult(number1, number2, operator);
if (OperatorConfig.RESULT_DEFAUTL != operatorResult) {
onResult.result(operatorResult);
}
}
}
使用方式,非常灵活,可以设置监听提交结合一体:
模拟客户端程序使用:
方式一:
package com.demo2.client;
import java.util.Scanner;
import com.demo2.operator.OnError;
import com.demo2.operator.OnResult;
import com.demo2.operator.Operator;
/**
* 模拟客户端程序
* @author Liudeli
*/
public class Client {
public static void main(String [] srgs) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数");
double number1 = Double.parseDouble(scanner.nextLine());
System.out.println("请输入运算符 ( + - * /)");
String operator = scanner.nextLine();
System.out.println("请输入第二数");
double number2 = Double.parseDouble(scanner.nextLine());
// 第一种用法
Operator.getInstance()
.setNumber1(number1)
.setNumber2(number2)
.setOperator(operator)
.setOnErrorListener(new OnError() {
public void error(int error) {
System.out.println("运算过程出错,错误码是:" + error);
}
})
.setOnResultListener(new OnResult() {
public void result(double result) {
System.out.println("运算结果是:" + result);
}
})
.operatorCommit();
}
}
方式二:
package com.demo2.client;
import java.util.Scanner;
import com.demo2.operator.OnError;
import com.demo2.operator.OnResult;
import com.demo2.operator.Operator;
/**
* 模拟客户端程序
* @author Liudeli
*/
public class Client2 {
public static void main(String [] srgs) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数");
double number1 = Double.parseDouble(scanner.nextLine());
System.out.println("请输入运算符 (+ - * /)");
String operator = scanner.nextLine();
System.out.println("请输入第二数");
double number2 = Double.parseDouble(scanner.nextLine());
// 第二种用法
Operator.getInstance()
.setNumber1(number1)
.setNumber2(number2)
.setOperator(operator)
.setOnErrorListener(onError)
.setOnResultListener(onResult)
.operatorCommit();
}
private static OnError onError = new OnError() {
public void error(int error) {
System.out.println("运算过程出错,错误码是:" + error);
}
};
private static OnResult onResult = new OnResult() {
public void result(double result) {
System.out.println("运算结果是:" + result);
}
};
}
方式三:
package com.demo2.client;
import java.util.Scanner;
import com.demo2.operator.OnError;
import com.demo2.operator.OnResult;
import com.demo2.operator.Operator;
/**
* 模拟客户端程序
* @author Liudeli
*/
public class Client3 {
public static void main(String [] srgs) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入第一个数");
double number1 = Double.parseDouble(scanner.nextLine());
System.out.println("请输入运算符 (+ - * /)");
String operator = scanner.nextLine();
System.out.println("请输入第二数");
double number2 = Double.parseDouble(scanner.nextLine());
// 第三种用法
Operator instance = Operator.getInstance();
instance.setNumber1(number1);
instance.setNumber2(number2);
instance.setOperator(operator);
instance.setOnErrorListener(new OnError() {
public void error(int error) {
System.out.println("运算过程出错,错误码是:" + error);
}
});
instance.setOnResultListener(new OnResult() {
public void result(double result) {
System.out.println("运算结果是:" + result);
}
});
instance.operatorCommit();
}
}
运行结果:
Project结构:
谢谢大家的观看,更多精彩技术博客,会不断的更新,请大家访问,
刘德利CSDN博客, http://blog.csdn.net/u011967006
JavaOperator小框架制作【精品博客】的更多相关文章
- 《全栈营销之如何制作个人博客》之一:用什么开发语言和CMS系统
现在的互联网,已经不再是初级互联时代,是需要全方位营销,自建粉丝池的时代,云码素材从提出全栈营销,到实践分析,总结出全栈营销第一步,先制作一个个人博客是最好的开始.今天开始就跟我一起学习如何制作一个精 ...
- python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET
python random模块 - 小驹的专栏 - 博客频道 - CSDN.NET python random模块 分类: python 2011-11-15 15:31 6037人阅读 评论(2) ...
- webapi框架搭建系列博客
webapi框架搭建系列博客 webapi框架搭建-创建项目(一) webapi框架搭建-创建项目(二)-以iis为部署环境的配置 webapi框架搭建-创建项目(三)-webapi owin web ...
- 微信小程序--简约风博客小程序(基于云开发 - 全开源)
微信小程序--简约风博客小程序(基于云开发 - 全开源) 项目启动纯属突发奇想,想看看博客小程序,例如wehalo博客小程序,但是感觉自建平台还要浪费自己的服务器算力,还没有访问量,省省吧. 本着白嫖 ...
- JavaLogin小框架制作【精品博客】
做一个小登录接口方法,让用户传入用户名,密码,就可以知道登录的结果信息,并以接口监听的方式控制. 先看客户端执行效果: 输入正确: 输入错误: 模拟客户端使用登录小框架: package com.de ...
- 《全栈营销之如何制作个人博客》之二:php环境安装及个人博客后台搭建 让你的博客跑起来
上一节我们讲了个人博客用什么开发语言,用什么CMS系统,从这一节我们就开始真正的干货,这一节我们讨论一下PHP环境的安装,及个人博客后台的搭建,让你的博客在正常的PHP环境中运行起来,你就可以进行后台 ...
- ASP.NET Core微服务+Tabler前端框架搭建个人博客1--开始前想说的话
写在前面 本人为在读研究生,特别喜欢.NET,觉得.NET的编程方式.语法都特别友好,学习.NET Core已经差不多有一年半了,从一开始不知道如何入门到现在终于可以编写一些小的应用程序,想一想还是非 ...
- 【实战】如何通过html+css+mysql+php来快速的制作动态网页(以制作一个博客网站为列)
一.开发环境的搭建 (1)apache+php+mysql环境搭建 因为要用apache来做服务器,mysql作为数据库来存储数据,php来写代码以此实现网页与数据库的交互数据,所以需要下载上述软件, ...
- 《PHP制作个人博客》之四:分类添加及前端导航数据用php动态调取
大家好,今天我们接着上一节的全栈营销个人博客制作,上一节我们把博客的模板给加载运行起来.今天我们主要讲解后台模板分类的添加,后台导航的添加,及前台导航的动态调用.一个好的博客,导航很重要,导航就像你网 ...
随机推荐
- intellij idea 的常见配置
1.视图配置 配置好后如下图: 2.修改字体大小 3.编码修改 4.行号显示 5.控制台字体大小调整 File->Settings->Editor->Colors & F ...
- 启动tomcat时,一直卡在Deploying web application directory
本来今天正常往服务器上扔一个tomcat 部署一个项目的, 最后再启动tomcat 的时候 发现项目一直都访问不了,看了一下日志: 1 2 3 4 5 6 7 [root@iz8vbdzx7y7owm ...
- Ubuntu Server17.10配置静态IP
今天心血来潮,装个虚拟机Ubuntu打算学点东西,遇到了一些问题,同时借助百度的力量解决了,下面是配置的过程. 一. 安装virtualbox 不知道从哪个版本开始,安装虚拟盒子的时候没有了安装虚拟网 ...
- Dungeon Game (GRAPH - DP)
QUESTION The demons had captured the princess (P) and imprisoned her in the bottom-right corner of a ...
- Minimum Cost(最小费用最大流,好题)
Minimum Cost http://poj.org/problem?id=2516 Time Limit: 4000MS Memory Limit: 65536K Total Submissi ...
- 【校招面试 之 C/C++】第4题 拷贝构造函数被调用的3个时机
1.被调用的3个时机: (1)直接初始化或拷贝初始化: (2)将一个对象作为一个实参传递,形参采用非指针或非引用的对象进行接收时(指针即指向了同一块空间,并未实现拷贝:而引用就是实参本身): (3)函 ...
- count(distinct) 与group by 浅析
x在传统关系型数据库中,group by与count(distinct)都是很常见的操作.count(distinct colA)就是将colA中所有出现过的不同值取出来,相信只要接触过数据库的同学都 ...
- webstorm 2017 激活破解
2017-06-15更新 之前都是使用2017.2.27的方法,版本是2017.1.1,还没提示过期,但是根据评论说这个链接已经失效了,评论也给出了个新地址:http://idea.iteblog.c ...
- 解决lhgDialog插件在IE11浏览器的BUG
项目中用到一款lhgDialog插件,最近在Win7系统IE11浏览器打上最新补丁(KB4012204)后,对话框内容的高度变成默认高度,经过调试,修改了lhgDialog里的iframe高度,问题解 ...
- 201621123008 《Java程序设计》第五周学习总结
1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词 关键词:接口,内部类. 1.2 尝试使用思维导图将这些关键词组织起来.注:思维导图一般不需要出现过多的字. 1.3 可选:使用常 ...