`
xangqun
  • 浏览: 83127 次
  • 性别: 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源码中实现工厂模式,通常包括以下几个步骤: 1. 定义产品接口或抽象类,描述产品的公共行为。 2. 创建具体的产品类,实现产品接口或继承抽象类,提供具体的功能。 3. 设计工厂类,可以是抽象的或具体的,根据...

    日历备忘录Java源码

    在本项目中,"日历备忘录Java源码" 提供了一套完整的日历应用程序的源代码,主要由四个核心文件组成:NotePad.java、CalendarPad.java、Month.java 和 Year.java。这些文件分别代表了备忘录、日历、月份和年份的功能...

    微信小程序源码 备忘录(学习版)

    微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习...

    微信小程序 备忘录 (源码)

    微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小...

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

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

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

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

    备忘录系统(源码+项目说明).zip

    备忘录系统(源码+项目说明).zip备忘录系统(源码+项目说明).zip备忘录系统(源码+项目说明).zip备忘录系统(源码+项目说明).zip备忘录系统(源码+项目说明).zip备忘录系统(源码+项目说明).zip备忘录系统...

    java抽象工厂模式源码实例

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

    java版大话西游源码

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

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

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

    大话模式所有源码,希望对大家有帮助

    大话模式所有源码,希望对大家有帮助 对学习设计模式很有帮助

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

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

    Android程序研发源码Android 备忘录源码.zip

    在Android程序开发中,备忘录应用是一种常见的项目,它涉及到...通过分析和学习这个备忘录应用的源码,开发者可以提升对Android开发的整体理解,掌握实际项目开发中的最佳实践,为今后的Android应用开发打下坚实基础。

    尚硅谷设计模式源码笔记课件.zip

    行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式) 2) 学习目标:通过学习,学员...

    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做的工厂模式例子,网上大多只有文章,没有源码,我根据那些文字抽空做了简单工厂模式,工厂模式,抽象工厂三个例子。压缩包里工有三个文件夹,factory1,factory2,factory3,分别是简单工厂模式,工厂模式...

Global site tag (gtag.js) - Google Analytics