`
xangqun
  • 浏览: 82580 次
  • 性别: Icon_minigender_1
  • 来自: 江西
社区版块
存档分类
最新评论

简单工厂模式java源码实现(大话设计模式学习备忘录)

阅读更多
/**
 * 简单工厂模式</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源码" 提供了一套完整的日历应用程序的源代码,主要由四个核心文件组成:NotePad.java、CalendarPad.java、Month.java 和 Year.java。这些文件分别代表了备忘录、日历、月份和年份的功能...

    小程序源码 备忘录 (代码+截图)

    小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+...

    毕业设计基于JavaWeb实现的一个备忘录系统项目源码.zip

    毕业设计基于JavaWeb实现的一个备忘录系统项目源码。难度适中,新手自己可操作 备忘录 介绍 后端部分基于Servlet、Jdbc实现. 前端部分基于Layui、jqury实现。 一个简单的前后端分离Demo,前后端交互JSON数据格式 ...

    java抽象工厂模式源码实例

    总的来说,这份压缩包提供了一个Java实现的抽象工厂模式实例,通过学习和理解这个例子,你可以深入掌握抽象工厂模式的原理和使用场景,这对于提升你的Java编程能力以及软件设计水平非常有帮助。在实际项目中,灵活...

    java版大话西游源码

    《Java版大话西游源码》是一款基于Java编程语言开发的角色扮演游戏(RPG)教程,对于初学者和想要深入理解游戏开发的程序员来说,它提供了丰富的学习资源。这款教程涵盖了多线程技术和自动寻路算法等核心概念,是...

    《大话设计模式》C++实现-design-patterns-cpp.zip

    《大话设计模式》C++实现-design-patterns-cpp

    Android 备忘录源码.rar

    本文将深入探讨如何基于Android平台开发一个备忘录应用,通过分析“Android 备忘录源码.rar”中的代码,我们可以学习到以下几个关键知识点: 1. **用户界面设计**:从项目中包含的图片资源(如1_120916130147_1.png...

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】

    java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...

    java版本的设计模式的实现demo

    根据不同的情况,可以实现简单工厂模式、工厂方法模式或抽象工厂模式。 4. 观察者模式 观察者模式是典型的行为型模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,其所有依赖者都会得到通知并自动...

    Head First 设计模式 JAVA源码

    第二十二讲:备忘录模式 第二十三讲:访问者模式 第二十四讲:状态模式 第二十五讲:命令模式 第二十六讲:开放-封闭原则 第二十七讲:里氏转换原则 第二十八讲:依赖倒转原则 第二十九讲:迪米特法则 第三...

    基于大话设计模式的Java实现与案例辅助学习源码

    该项目为基于大话设计模式的Java实现源码库,共计117个文件,涵盖112个Java源代码文件、1个Git忽略规则文件、1个Markdown文档、1个Maven构建文件、1个命令行脚本文件以及1个XML配置文件。旨在通过丰富的案例辅助学习...

    java设计模式刘伟源码

    3. 行为型模式(Behavioral Patterns):责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、备忘录模式(Memento)、观察者模式(Observer)、状态...

    基于《大话设计模式》的Java设计模式学习源码实战

    该项目是一个基于《大话设计模式》的Java设计模式学习源码实战,包含41个文件,其中36个为Java源文件,4个为Markdown文档,以及1个LICENSE文件。通过实际编码实践,帮助开发者深入理解并掌握设计模式的应用。

    HeadFirst设计模式JAVA版源码

    《HeadFirst设计模式JAVA版源码》是一份深入学习设计模式的重要资源,它基于流行的编程语言Java,旨在帮助开发者理解并应用设计模式于实际项目中。设计模式是软件工程中的重要概念,它代表了在特定场景下解决问题的...

    简单工厂模式源码-JAVA

    在给定的压缩包文件"EasyFactory"中,可能包含了上述示例的Java源代码,供初学者学习和理解简单工厂模式的实现。通过阅读和分析这些代码,可以帮助开发者更好地掌握设计模式的应用,并提高编程能力。

    设计模式之备忘录模式,内含可运行代码及详细解释

    备忘录模式是一种常用的设计模式,它在软件工程中扮演着重要的角色,特别是在需要保护对象内部状态不被外部篡改的场景下。备忘录模式的核心思想是提供一种方法来捕获一个对象的内部状态,并在该对象之外保存这个状态...

    23种设计模式之Java实现源码.zip

    23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种设计模式之Java实现源码 23种...

    23种设计模式java源码

    行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 其实还有两类:并发型模式和线程池模式。

    qt工厂模式例子qt简单工程模式源码

    6. 简单工厂模式 部分源码实例: // 奔驰工厂 class BenzFactory : public AFactory { public: ICar* CreateCar() { return new BenzCar(); } }; // 宝马工厂 class BmwFactory : public AFactory { public: ...

Global site tag (gtag.js) - Google Analytics