/**
* 简单工厂模式</br>
* QS:请用C++,JAVA,C#任意一种以面向对象语言实现一个计算器控制台程序:要求输入2个数和运算符号,得到结果
* 第一次程序
* @author xangqun
*
*/
public class Program {
/**
* PS:
* <PRE>用a,b,c,d这样的命名是非常不规范的</PRE>
* <PRE>判断分支(4个if)这样的写法,意味着每个条件都要做出判断,等于计算机做了3次无用功</PRE>
* <pre>如果除数为0或是不填怎么办?</pre>
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
System.out.println("请输入数字A:");
String a = new BufferedReader(new InputStreamReader(
System.in)).readLine();
System.out.println("请输入运算符:");
String b=new BufferedReader(new InputStreamReader(System.in)).readLine().trim();
System.out.println("请输入数字c:");
String c=new BufferedReader(new InputStreamReader(System.in)).readLine();
double d = 0;
if("+".equalsIgnoreCase(b)){
d=Double.valueOf(a)+Double.valueOf(c);
}
if("-".equalsIgnoreCase(b)){
d=Double.valueOf(a)-Double.valueOf(c);
}
if("*".equalsIgnoreCase(b)){
d=Double.valueOf(a)*Double.valueOf(c);
}
if("/".equalsIgnoreCase(b)){
d=Double.valueOf(a)/Double.valueOf(c);
}
System.out.println("结果为:"+d);
}
}
/**
* 简单工厂模式</br>
* QS:请用C++,JAVA,C#任意一种以面向对象语言实现一个计算器控制台程序:要求输入2个数和运算符号,得到结果
* 改进的程序1
* @author xangqun
*
*/
public class ProgramTwo {
/**<b>面向对象(活字印刷启迪)</b>
* <ul>
* <li>1.要改只需更改要改之字,此为可维护</li>
* <li>2.这些字并非用完这次就无用完全可以在后来的印刷中重复使用,此为可复用</li>
* <li>3.此诗若要加字只需另外刻字加入即可,此为可扩展</li>
* <li>4.字的排列其实可能是竖排可能横排此时只需将活字移动就可做到满足排列需求,此是灵活性好</li>
* </ul>
*
* PS:计算要和显示分离,准确的说就是:<b>业务逻辑与界面逻辑分开<b>
* @param args
*/
public static void main(String[] args) {
try{
System.out.println("请输入数字1:");
String strA=new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println("请输入运算符:");
String stroperate=new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println("请输入数字2:");
String strB=new BufferedReader(new InputStreamReader(System.in)).readLine();
String strResult;
if("+".equalsIgnoreCase(stroperate)){
strResult=String.valueOf(Double.valueOf(strA)+Double.valueOf(strB));
}else if("-".equalsIgnoreCase(stroperate)){
strResult=String.valueOf(Double.valueOf(strA)-Double.valueOf(strB));
}else if("*".equalsIgnoreCase(stroperate)){
strResult=String.valueOf(Double.valueOf(strA)*Double.valueOf(strB));
}else{
if("0".equalsIgnoreCase(strB)){
strResult="除数不能为0";
}else{
strResult=String.valueOf(Double.valueOf(strA)/Double.valueOf(strB));
}
}
System.out.println("结果为:"+strResult);
}catch(Exception e){
System.out.println("你的输入有错误!");
}
}
}
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()throws Exception;
}
public class OperationAdd extends Operation {
@Override
public double getResult() {
double numberd;
numberd=getNumberA()+getNumberB();
return numberd;
}
}
public class OperationDiv extends Operation {
@Override
public double getResult() throws Exception {
double numberd;
if(getNumberB()==0){
throw new Exception("除数不为0");
}
numberd=getNumberA()/getNumberB();
return numberd;
}
}
public class OperationMul extends Operation {
@Override
public double getResult() {
double numberd;
numberd=getNumberA()*getNumberB();
return numberd;
}
}
public class OperationSub extends Operation {
@Override
public double getResult() {
double numberd;
numberd=getNumberA()-getNumberB();
return numberd;
}
}
/**
* 简单工厂模式</br>
* QS:请用C++,JAVA,C#任意一种以面向对象语言实现一个计算器控制台程序:要求输入2个数和运算符号,得到结果
* 改进的程序2
* @author xangqun
*
*PS:面向对象的三大特性:封装,继承,多态,(<b>java的4个特性:抽象,封装,继承,多态</b>)
* <br>这里只用到了特性:<b>封装</b>
*/
public class ProgramThree {
public static double getResult(double numberA,double numberB,String operate){
double result=0;
if("+".equalsIgnoreCase(operate)){
result=numberA+numberB;
}else if("-".equalsIgnoreCase(operate)){
result=numberA-numberB;
}else if("*".equalsIgnoreCase(operate)){
result=numberA*numberB;
}else{
result=numberA/numberB;
}
return result;
}
/**
* @param args
*/
public static void main(String[] args) {
try{
System.out.println("请输入数字1:");
String strA=new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println("请输入运算符:");
String stroperate=new BufferedReader(new InputStreamReader(System.in)).readLine();
System.out.println("请输入数字2:");
String strB=new BufferedReader(new InputStreamReader(System.in)).readLine();
double strResult;
strResult=getResult(Double.valueOf(strA), Double.valueOf(strB), stroperate);
System.out.println("结果为:"+strResult);
}catch(Exception e){
System.out.println("你的输入有错误!");
}
}
}
public class OperationFactory {
public static Operation createOperate(String operate){
Operation operation=null;
if("+".equalsIgnoreCase(operate)){
operation=new OperationAdd();
}else if("-".equalsIgnoreCase(operate)){
operation=new OperationSub();
}else if("*".equalsIgnoreCase(operate)){
operation=new OperationMul();
}else{
operation=new OperationDiv();
}
return operation;
}
}
/**
* 简单工厂模式</br>
* QS:请用C++,JAVA,C#任意一种以面向对象语言实现一个计算器控制台程序:要求输入2个数和运算符号,得到结果 改进的程序3
*
* @author xangqun
*
* PS:面向对象的三大特性:封装,继承,多态,(<b>java的4个特性:抽象,封装,继承,多态</b>)
*/
public class ProgramFour {
/** <h1>简单工厂模式</h1>
* 到底要实例化谁,将来会不会增加实例化的对象,应该考虑用一个单独的类来做这个创建实例的过程,这就是工厂
* @param args
*/
public static void main(String[] args) {
try {
System.out.println("请输入数字1:");
String strA = new BufferedReader(new InputStreamReader(System.in))
.readLine();
System.out.println("请输入运算符:");
String stroperate = new BufferedReader(new InputStreamReader(
System.in)).readLine();
System.out.println("请输入数字2:");
String strB = new BufferedReader(new InputStreamReader(System.in))
.readLine();
Operation oper;
oper=OperationFactory.createOperate(stroperate);
oper.setNumberA(Double.valueOf(strA));
oper.setNumberB(Double.valueOf(strB));
double result=oper.getResult();
System.out.println(result);
} catch (Exception e) {
}
}
}
分享到:
相关推荐
自己写的设计模式 工厂模式的Java源码,如果大家喜欢的话,就下载看看
微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习...
设计模式参考《大话设计模式》 工厂简单模式 创造型模式 工厂方法模式 抽象工厂模式 原型模式 建造者模式 单例模式 结构型模式 队列模式 桥接模式 组合模式 装饰模式 外观模式 享元模式 代理模式 行为模式(类行为...
微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小...
JAVA程序日历源码,层次清晰,编写规范
小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+...
java设计模式-备忘录模式源代码, 源码中为设计模式的工程源文件,已经测试过,没有问题。
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
毕业设计基于JavaWeb实现的一个备忘录系统项目源码。难度适中,新手自己可操作 备忘录 介绍 后端部分基于Servlet、Jdbc实现. 前端部分基于Layui、jqury实现。 一个简单的前后端分离Demo,前后端交互JSON数据格式 ...
自己写的设计模式 抽象工厂模式的Java源码,如果大家喜欢的话,就下载看看
19备忘录模式:定义深度拷贝抽象类备忘录模式:定义深度拷贝抽象类 设计模式(JAVA语言实现)--20种设计模式附带源码PPT模板全文共22页,当前为第20页。 logo 20状态模式:定义状态类、定义状态切换类状态模式:...
Java 经典设计模式讲解以及项目实战 设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述...
第二十二讲:备忘录模式 第二十三讲:访问者模式 第二十四讲:状态模式 第二十五讲:命令模式 第二十六讲:开放-封闭原则 第二十七讲:里氏转换原则 第二十八讲:依赖倒转原则 第二十九讲:迪米特法则 第三...
设计模式JAVA实现源码,设计模式JAVA实现源码
本实例是java做的工厂模式例子,网上大多只有文章,没有源码,我根据那些文字抽空做了简单工厂模式,工厂模式,抽象工厂三个例子。压缩包里工有三个文件夹,factory1,factory2,factory3,分别是简单工厂模式,工厂模式...
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
Android 备忘录源码.rar
单例模式、代理模式、工厂模式、适配器模式、策略模式、模板方法模式的java源码实现
23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种...
本人大四,根据老师要求写的一份抽象工厂模式的例子。你们下载下来导入myclipse中即可使用。其中在测试Test.java中,你们可以看看运行效果