`
xangqun
  • 浏览: 84560 次
  • 性别: 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各种设计模式

    这个压缩包文件"大话模式源代码"可能包含了28种不同的设计模式的实例源码,这对于学习和理解设计模式非常有帮助。 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。在Java中,单例模式通常通过私有...

    毕业论文-安全跳转页面-整站商业源码.zip

    毕业论文-安全跳转页面-整站商业源码.zip

    实训商业源码-视频解析-毕业设计.zip

    实训商业源码-视频解析-毕业设计.zip

    实训商业源码-小小素材库V7.8.45 小程序前端+后端-毕业设计.zip

    实训商业源码-小小素材库V7.8.45 小程序前端+后端-毕业设计.zip

    毕业论文-二刺螈导航-整站商业源码.zip

    毕业论文-二刺螈导航-整站商业源码.zip

    AI在MES中的应用.pdf

    AI在MES中的应用.pdf

    基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例

    基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例,该项目是个人毕设项目,答辩评审分达到98分,代码都经过调试测试,确保可以运行!欢迎下载使用,可用于小白学习、进阶。该资源主要针对计算机、通信、人工智能、自动化等相关专业的学生、老师或从业者下载使用,亦可作为期末课程设计、课程大作业、毕业设计等。项目整体具有较高的学习借鉴价值!基础能力强的可以在此基础上修改调整,以实现不同的功能。 基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了Cesium的一些基础示例基于Vue 3实现的Cesium大屏可视化项目源代码,展示了

    【跨境电商营销】亚马逊蓝牙音箱产品数据分析:市场表现与关键词影响研究

    内容概要:该报告由Co.media可美亚发布,基于Amazon平台上的蓝牙音箱产品数据,通过网页工具抓取并清理了772笔交易信息,最终分析了248笔有效数据。报告揭示了评论数高的产品通常售价较高,但低价并非获得高评级的有效手段。高频关键词如“Speaker”、“Bluetooth”、“Smart”、“Wireless”等能显著提升搜索匹配度和销售排名,尤其是前20名产品大多带有这些关键词。此外,价格较低的产品多归类为手机&配件,而价格较高的则归类为电子产品。前50名产品在金额、评论和星数方面具有明显优势,而新产品若想快速进入搜索排名前10,则需重点投入于产品定价和评论星数的提升。 适合人群:希望拓展北美市场的中国品牌企业、从事跨境电商的从业者以及对蓝牙音箱市场感兴趣的投资者。 使用场景及目标:①帮助企业了解蓝牙音箱在北美市场的竞争态势;②指导企业优化产品标题中的关键词选择,以提高搜索排名;③为制定产品定价策略和提升用户评价提供数据支持。 其他说明:Co.media可美亚是一家专注于为中国品牌提供跨境整合营销服务的公司,尤其擅长帮助企业在北美市场建立品牌知名度和竞争力。报告中涉及的数据分析方法包括统计回归分析,用于评估不同因素对搜索排名和销售排名的影响。

    基于Go+python实现的网络异常流量检测系统+源码+GUI界面(毕业设计&课程设计&项目开发)

    基于Go+python实现的网络异常流量检测系统+源码+GUI界面,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于Go+python实现的网络异常流量检测系统+源码+GUI界面,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用~ 基于Go+python实现的网络异常流量检测系统+源码+GUI界面,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于Go+python实现的网络异常流量检测系统+源码+GUI界面,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于Go+python实现的网络异常流量检测系统+源码+GUI界面,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用 基于Go+python实现的网络异常流量检测系统+源码+GUI界面,适合毕业设计、课程设计、项目开发。项目源码已经过严格测试,可以放心参考并在此基础上延申使用

    ANSYS SpaceClaim直接建模技术.pdf

    ANSYS SpaceClaim直接建模技术.pdf

    毕业论文-超人配送代驾跑腿小程序V1.5.10 前端+后端-整站商业源码.zip

    毕业论文-超人配送代驾跑腿小程序V1.5.10 前端+后端-整站商业源码.zip

    毕业论文-wx码支付-整站商业源码.zip

    毕业论文-wx码支付-整站商业源码.zip

    实训商业源码-智能AI雷达名片+1.6.7-毕业设计.zip

    实训商业源码-智能AI雷达名片+1.6.7-毕业设计.zip

    ANSYS网格划分.pdf

    ANSYS网格划分.pdf

    3D变形技术在汽车造型设计中的应用.pdf

    3D变形技术在汽车造型设计中的应用.pdf

    ANSYS高级流体动力学培训手册2.pdf

    ANSYS高级流体动力学培训手册2.pdf

    vosk-model-small-cn-022

    vosk-model-small-cn-022

    实训商业源码-视频小店V1.0.7 原版-毕业设计.zip

    实训商业源码-视频小店V1.0.7 原版-毕业设计.zip

    HR_S30-1800.hard

    HR_S30-1800.hard

Global site tag (gtag.js) - Google Analytics