Java从零开始学十七(简单工厂)
简单工厂的实现
实现一个计算器:要求输入2个数,和运算符,得到结果
Operation类
package com.pb.demo1;
public class Operation {
private double num1;
private double num2;
public double getResult(double num1,double num2){
double result=0;
return result;
}
public double getNum1() {
return num1;
}
public void setNum1(double num1) {
this.num1 = num1;
}
public double getNum2() {
return num2;
}
public void setNum2(double num2) {
this.num2 = num2;
}
}
加,减,乖,除,取模
package com.pb.demo1;
/*
* 加法
*/
public class AddOperation extends Operation { @Override
public double getResult(double num1, double num2) { return (num1+num2);
} }
package com.pb.demo1;
/*
* 减法
*/
public class Substruction extends Operation { @Override
public double getResult(double num1, double num2) { return (num1-num2);
} }
package com.pb.demo1;
/*
* 乖法
*/
public class Multiplication extends Operation { @Override
public double getResult(double num1, double num2) { return (num1*num2);
} }
package com.pb.demo1;
/*
* 除法
*/
public class Division extends Operation { @Override
public double getResult(double num1, double num2) { return (num1/num2);
} }
package com.pb.demo1;
/*
* 取余
*/
public class ModeOperation extends Operation { @Override
public double getResult(double num1, double num2) { return (num1%num2);
} }
工厂类:
package com.pb.demo1;
/*
* 简单工厂类
*/
public class Factory {
//返回类型 为类对象
public Operation getResult(String op){
Operation operation=null;
//根据操作符来声明对象并返回
switch (op){
case "+":
operation=new AddOperation();
break;
case "-":
operation=new Substruction();
break;
case "*":
operation=new Multiplication();
break;
case "/":
operation=new Division();;
break;
case "%":
operation=new ModeOperation();
break;
default:
System.err.println("输入运算符不正确!");
break;
}
//返回生成的对象
return operation;
}
}
测试类:
package com.pb.demo1; import java.util.InputMismatchException;
import java.util.Scanner; /*
* 计算器
*/
public class Demo1 { public static void main(String[] args) {
//声明扫描器类型变量
Scanner input =new Scanner(System.in);
//声明工厂对象
Factory fac=new Factory();
try{
System.out.println("请输入第一个整数:");
double num1=input.nextDouble();
System.out.println("请输入第二个整数:");
double num2=input.nextDouble();
System.out.println("请输运算符:+、-、*、/、%");
String op=input.next();
//接收工厂的返回对象 工厂根据操作符生成的对象
Operation operation=fac.getResult(op);
//接收计算结果
double result=operation.getResult(num1, num2);
//显示计算结果
System.out.println(num1+"与"+num2+"的运行结果:"+result);
}catch(InputMismatchException e){
System.err.println("输入类型不正确!"); }catch(Exception e){
e.printStackTrace();
}
}
}
Java从零开始学十七(简单工厂)的更多相关文章
- Java设计模式2:简单工厂模式
简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...
- Java设计模式学习记录-简单工厂模式、工厂方法模式
前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...
- JAVA基础——设计模式之简单工厂模式
在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...
- 利用Java反射机制优化简单工厂设计模式
之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...
- Java 关于策略模式+简单工厂模式下的思考
导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...
- Java实验项目三——简单工厂模式
Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...
- (转)java反射机制及简单工厂模式
第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...
- java设计模式-----1、简单工厂模式
简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...
- java游戏服务器 策略+简单工厂
上一篇中我们讲到简单工厂模式有它的弊端,它不好在哪里呢? 我们看到,每次创建场景,我们都需要暴露两个类... 这是比较不好的, 可以通过策略模式+简单工厂模式来稍微改造下 一.先来一个策略模式UML图 ...
随机推荐
- 基于RBGD的mapping
最近学习RGBD的SLAM,收集了两个RGBD的mapping的开源工具包 1.RGBDSlam2 a.安装方法: #准备工作空间 source /opt/ros/indigo/setup.bash ...
- 【原】Java程序调用远程Shell脚本
此程序的目的是执行远程机器上的Shell脚本. [环境参数]远程机器IP:192.168.234.123用户名:root密码:rootShell脚本的路径:/home/IFileGenTool/Bak ...
- Android 通话记录分析
http://stackoverflow.com/questions/6786666/how-do-i-access-call-log-for-android http://android2011de ...
- RAD Studio 2010~XE8 官方 ISO 下载地址 (2015-03-28更新)
http://bbs.csdn.net/topics/390816856 RAD Studio XE8 目前最新版 v22.0.19027.8951 官方 ISO 文件下载(6.72GB):http: ...
- HttpPost+json请求---服务器中文乱码及其他
好凌乱的题目,只是一些功能点的总结咯. 首先构造一个json对象用于存放数据,如果光加上header为utf-8就能解决中文就大错特错了... json对象可以put变量,也可以put对象.取的时候o ...
- linux 内核大牛-谢宝友
http://blog.chinaunix.net/uid/25845340.html 谢宝友:毕业于四川省税务学校税收专业,现供职于中兴通讯操作系统团队,对操作系统内核有较强的兴趣.专职于操作系统内 ...
- spring 上下文和spring mvc上下文和web应用上下文servletContext之间的关系
要想很好理解这三个上下文的关系,需要先熟悉spring是怎样在web容器中启动起来的.spring的启动过程其实就是其IoC容器的启动过程,对于web程序,IoC容器启动过程即是建立上下文的过程. s ...
- 10.2.2移动产品离线功能等具体解释----暨4月8日移动《在离线一体化》公开课Q&A
4月8日<离,或者不离,ArcGIS移动的"在离线一体化"就在那里!>移动公开课已经结束,针对公开课上粉丝们重点关注的问题,本博客进行了具体的解答.答疑主要环绕最新的R ...
- uva 1025 A Spy in the Metro 解题报告
A Spy in the Metro Time Limit: 3000MS 64bit IO Format: %lld & %llu Submit Status uDebug Secr ...
- otl翻译(11) -- OTL的迭代器
OTL stream read iterator 这个类是一个像传统的JDBC中的getter()操作一样扩展了OTL流的模板类.它现在还不支持UNICODE字符集.它对otl_refcur_stre ...