大话设计模式书中摘录语句:
喝酒唱歌,人生真爽。
活字印刷:
1,要改,只需更改要改之字,此为
可维护;
2,这些字并非用完这次就无用,完全可以再后来的印刷中重复使用,此乃
可复用;
3,若要加字,只需另刻字加入即可,这是
可扩展;
4,字的排列其实可能是横排或竖排,只需将活字移动就可满足排列需求,这是
灵活性好。
按照里面的第一章,写了个java版的计算器实例,以便自己更深入理解。
Operation抽象类
package cn;
import java.math.BigDecimal;
public abstract class Operation {
protected BigDecimal dcm;
protected BigDecimal dcm1;
protected BigDecimal dcm2;
/**
* @param num1
* @param num2
*/
public Operation(String num1,String num2){
dcm1=new BigDecimal(num1.toCharArray());
dcm2=new BigDecimal(num2.toCharArray());
}
public abstract String getResult();
}
修改后的OperationFactory,OperationAdd等不能使用单例。
package cn;
import cn.beans.OperationAdd;
import cn.beans.OperationDiv;
import cn.beans.OperationMul;
import cn.beans.OperationSub;
public class OperationFactory {
//这样就不会出现双重检查单例的问题了。
private static OperationFactory instance=new OperationFactory();
private OperationAdd operationAdd;
private OperationSub operationSub;
private OperationMul operatoinMul;
private OperationDiv operationDiv;
public static OperationFactory getInstance() {
return instance;
}
public OperationAdd OperationAdd(String num1,String num2){
operationAdd= new OperationAdd(num1,num2);
return operationAdd;
}
public OperationSub OperationSub(String num1,String num2){
operationSub= new OperationSub(num1,num2);
return operationSub;
}
public OperationMul OperationMul(String num1,String num2){
operatoinMul= new OperationMul(num1,num2);
return operatoinMul;
}
public OperationDiv OperationDiv(String num1,String num2){
operationDiv= new OperationDiv(num1,num2);
return operationDiv;
}
}
加法业务Bean类OperationAdd
package cn.beans;
import cn.Operation;
public class OperationAdd extends Operation {
public OperationAdd(String num1, String num2) {
super(num1,num2);
}
@Override
public String getResult() {
dcm = dcm1.add(dcm2);
return dcm.toString();
}
}
减法业务Bean类OperationSub
package cn.beans;
import cn.Operation;
public class OperationSub extends Operation{
public OperationSub(String num1, String num2) {
super(num1, num2);
}
@Override
public String getResult() {
dcm = dcm1.subtract(dcm2);
return dcm.toString();
}
}
乘法业务Bean类OperationMul
package cn.beans;
import java.math.BigDecimal;
import cn.Operation;
public class OperationMul extends Operation {
public OperationMul(String num1, String num2) {
super(num1, num2);
}
@Override
public String getResult() {
//setScale(保留小数位数,精确方式);
dcm=dcm1.multiply(dcm2).setScale(3, BigDecimal.ROUND_HALF_UP);
return dcm.toString();
}
}
除法业务Bean类OperationDiv
package cn.beans;
import java.math.BigDecimal;
import cn.Operation;
public class OperationDiv extends Operation {
public OperationDiv(String num1, String num2) {
super(num1, num2);
}
@Override
public String getResult() {
if (dcm2.toString().equals("0"))
return "除数不能为零";
//商=被除数.divide(除数,保留小数位数,精确方法)
dcm=dcm1.divide(dcm2,2,BigDecimal.ROUND_HALF_UP);
return dcm.toString();
}
}
还有最后一个JUnit的测试类
package junit.test;
import org.junit.Test;
import cn.Operation;
import cn.OperationFactory;
import cn.beans.OperationDiv;
import cn.beans.OperationMul;
import cn.beans.OperationSub;
public class Test_Calculator {
@Test public void test(){
/**
* 加减乘除
* 测试类
*/
String str=null;
String num1="12.34";
String num2="43.21";
//
Operation operationAdd = OperationFactory.getInstance().OperationAdd(num1, num2);
str = operationAdd.getResult();
System.err.println("加法结果1:"+str);
num1="56.78";
num2="43.21";
Operation operationAdd2 = OperationFactory.getInstance().OperationAdd(num1, num2);
str = operationAdd2.getResult();
System.err.println("加法结果2:"+str);
//
Operation operationSub = OperationFactory.getInstance().OperationSub(num1, num2);
str = operationSub.getResult();
System.err.println("减法结果:"+str);
//
Operation operationMul = OperationFactory.getInstance().OperationMul(num1, num2);
str = operationMul.getResult();
System.err.println("乘法结果:"+str);
//
num1="78.90";
num2="90.12";
Operation operationMul2 = OperationFactory.getInstance().OperationMul(num1, num2);
str = operationMul2.getResult();
System.err.println("乘法结果2:"+str);
//
Operation operationDiv = OperationFactory.getInstance().OperationDiv(num1, num2);
str = operationDiv.getResult();
System.err.println("除法结果:"+str);
//
System.err.println("End.");
}
}
分享到:
相关推荐
标题中的“lcd.rar_单片机 计算器_计算器 Proteus 单片机_计算器 lcd 单片机_计算器 单片机_计算器程序”指的是一个与单片机相关的项目,该项目涉及到了计算器的设计与实现。其中,LCD(Liquid Crystal Display)是...
这个“kexuejisuanqi.rar_labview 计算器_labview计算器_科学计算器”项目,正如其标题和描述所示,是一个基于LabVIEW构建的科学计算器应用程序。在本文中,我们将深入探讨LabVIEW的基础知识,以及如何利用它来创建...
"c语言栈计算器" 和 "vc___计算器"、"vc_计算器"、"计算器_vc" 重复强调了程序的关键特征——它是基于C语言的栈式计算器,且与Visual C++环境有关。 **压缩包子文件分析:** 压缩包内有两个文件:...
计算器__源码__HTML__计算器_源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码计算器__源码
LabVIEW计算器是利用该平台的强大功能来实现传统计算器功能的实例,它通过图形化的编程方式,使非程序员也能轻松地设计和实现各种计算逻辑。 首先,LabVIEW的核心在于其数据流编程模型,即G语言(Graphical ...
【标题】"jisuanqi.rar_html js计算器_js计算器_计算器_计算器 js_计算器JS" 提供的是一个基于HTML和JavaScript实现的全功能计算器项目。这个计算器不仅具备基本的加、减、乘、除运算,还可能包括更复杂的计算功能,...
kh_01_简易计算器.py
标题中的“calculator---calculator--.rar_labview 计算器_labview计算器_计算器_计算器 lab”表明这是一个使用LabVIEW编写的计算器程序,可能是用于教学、实验或个人学习目的。 描述中提到:“用labview写的计算器...
【标签】所列的标签强调了关键词“vb”、“科学计算器”和“计算器”,这表明这个项目是VB编程语言的一个实例,特别是关于创建具有科学计算功能的应用。"vb__科学计算器"、"vb_科学计算器" 和 "vb_计算器" 这些标签...
总的来说,这个项目提供了研究单片机程序设计和嵌入式系统开发的实例。通过对“TC.rar”中的代码进行学习和分析,我们可以加深对单片机硬件原理的理解,掌握如何编写控制程序,以及如何利用仿真工具进行调试。这对于...
【标题】"CAL_exp.rar_VC串口通信_vc 计算器_vc计算器_计算器" 提供了一个关于使用Visual C++(简称VC)开发的串口通信功能的计算器项目。这个计算器不仅具备基本的加减乘除功能,还能够处理更复杂的数学表达式。...
在VB(Visual Basic)编程环境中,我们可以创建各种类型的桌面应用程序,包括计算器。在这个例子中,我们专注于构建一个“clac.rar_cl_vb 计算器”,它是一个类似于Windows自带的标准计算器的应用程序。这个计算器...
这个计算器旨在为初学者提供一个理解Java编程逻辑和控制流程的实例。 【描述】"简易的JAVA计算器" 提供了一个直观的示例,展示了如何在Java中设计一个用户界面以及处理用户的输入和输出。这个项目可能包含了一个...
这个“mfc.rar”压缩包包含了一个基于MFC的科学计算器项目,它允许用户进行复杂的数学运算,包括基本的加、减、乘、除以及带有括号的表达式计算,并提供了绝对值和其他科学公式的功能。 首先,让我们深入了解一下...
一个基于Labview编写的计算器,类似Windows自带计算器,几乎完全一样
【标题】"java_calculator2.rar_java 计算器_java 计算器"指的是一个基于Java编程语言实现的计算器程序。这个程序可能是作者独立开发的,且在互联网上较为独特,难以找到完全相同的设计。 【描述】"自编java计算器...
总的来说,"cacul.rar_mfc 计算器"项目是一个将理论与实践完美融合的实例,它不仅展示了MFC在GUI开发中的强大功能,还让我们看到了编译原理在实际软件开发中的应用。对于学习计算机科学的人来说,这是一个宝贵的教育...
微信H5小游戏生命计算器_生命计算器源码_生命计算器_公众号吸粉
标题中的“jisuanqi.zip_1602 4_矩阵计算器_简易计算器_计算器键盘_键盘 1602”表明这是一个关于单片机项目,具体是设计了一个使用1602液晶显示器和4x4矩阵键盘的矩阵计算器。这个项目的重点在于硬件接口和软件编程...