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图 ...
随机推荐
- XMOJ 1133: 膜拜大牛 计算几何/两圆相交
1133: 膜拜大牛 Time Limit: 1 Sec Memory Limit: 131072KiBSubmit: 9619 Solved: 3287 题目连接 http://acm.xmu. ...
- 所谓jQuery.append()、jQuery.html()存在的XSS漏洞
使用jQuery.append().jQuery.html()方法时,如果其中内容包含<script>脚本而没有经过任何处理的话,会执行它. 简单的示例代码如下: var xssStr = ...
- MySQLAdmin的用法
mysqladmin 适合于linux和windows系统 linux下:mysqladmin -u[username] -p[password] status windows下:先在安装目录找到my ...
- 使用 soapUI 测试 REST 服务
REST 服务介绍 REST(Representational State Transfer)是 Roy Fielding 博士在 2000 年提出的一种新的软件架构风格,它以资源(resource) ...
- TCP Socket的一些行为
几个重要的结论: 1. read总是在接收缓冲区有数据时立即返回,而不是等到给定的read buffer填满时返回. 只有当receive buffer为空时,blocking模式才会等待,而nonb ...
- [Asp.net MVC]Bundle合并,压缩js、css文件
摘要 在web优化中有一种手段,压缩js,css文件,减少文件大小,合并js,css文件减少请求次数.asp.net mvc中为我们提供一种使用c#代码压缩合并js和css这类静态文件的方法. 一个例 ...
- 线程系列06,通过CLR代码查看线程池及其线程
在"线程系列04,传递数据给线程,线程命名,线程异常处理,线程池"中,我们已经知道,每个进程都有一个线程池.可以通过TPL,ThreadPool.QueueUserWorkItem ...
- Spring Boot1.5X升级到2.0指南
原文:https://www.jianshu.com/p/3494c84b4be3 前言 Spring Boot已经发布2.0有4个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把本博客中Sp ...
- phpExcel导出文件时内存溢出的问题
在使用PHPExcel导出文件时,经常会因为文件过大导致PHP内存溢出报错,为了解决这个问题,可以使用PHPExcel提供的参数进行优化.这里说的Excel文件过大并不一定是文件大小,更关键的在于文件 ...
- @Logback简介
Ceki Gülcü在Java日志领域世界知名.他创造了Log4J,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J这个"简单的日志前端接口 ...