简单工厂的实现

实现一个计算器:要求输入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从零开始学十七(简单工厂)的更多相关文章

  1. Java设计模式2:简单工厂模式

    简单工厂模式 简单工厂模式是类的创建模式,又叫做静态工厂方法模式.简单工厂模式由一个工厂对象决定生产出哪一种产品类的实例. 为什么要使用简单工厂模式 原因很简单:解耦. A对象如果要调用B对象,最简单 ...

  2. Java设计模式学习记录-简单工厂模式、工厂方法模式

    前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类 ...

  3. JAVA基础——设计模式之简单工厂模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式.简单工厂模式是由一个工厂 ...

  4. 利用Java反射机制优化简单工厂设计模式

    之前项目有个需求,审批流程的时候要根据配置发送信息:发送短信.发送邮件.当时看到这个就想到要用工厂模式,为什么要用工厂模式呢?用工厂模式进行大型项目的开发,可以很好的进行项目并行开发.就是一个程序员和 ...

  5. Java 关于策略模式+简单工厂模式下的思考

    导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...

  6. Java实验项目三——简单工厂模式

    Program: 请采用采用简单工厂设计模式,为某个汽车销售店设计汽车销售系统,接口car至少有方法print(), 三个汽车类:宝马.奥迪.大众 (属性:品牌,价格),在测试类中根据客户要求购买的汽 ...

  7. (转)java反射机制及简单工厂模式

    第一步,定义一个接口类 package factory.face; /** * 接口,为了保证返回的对象可以统一用 Product接受 * @author Administrator */ publi ...

  8. java设计模式-----1、简单工厂模式

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例,简单来说 ...

  9. java游戏服务器 策略+简单工厂

    上一篇中我们讲到简单工厂模式有它的弊端,它不好在哪里呢? 我们看到,每次创建场景,我们都需要暴露两个类... 这是比较不好的, 可以通过策略模式+简单工厂模式来稍微改造下 一.先来一个策略模式UML图 ...

随机推荐

  1. XMOJ 1133: 膜拜大牛 计算几何/两圆相交

    1133: 膜拜大牛 Time Limit: 1 Sec  Memory Limit: 131072KiBSubmit: 9619  Solved: 3287 题目连接 http://acm.xmu. ...

  2. 所谓jQuery.append()、jQuery.html()存在的XSS漏洞

    使用jQuery.append().jQuery.html()方法时,如果其中内容包含<script>脚本而没有经过任何处理的话,会执行它. 简单的示例代码如下: var xssStr = ...

  3. MySQLAdmin的用法

    mysqladmin 适合于linux和windows系统 linux下:mysqladmin -u[username] -p[password] status windows下:先在安装目录找到my ...

  4. 使用 soapUI 测试 REST 服务

    REST 服务介绍 REST(Representational State Transfer)是 Roy Fielding 博士在 2000 年提出的一种新的软件架构风格,它以资源(resource) ...

  5. TCP Socket的一些行为

    几个重要的结论: 1. read总是在接收缓冲区有数据时立即返回,而不是等到给定的read buffer填满时返回. 只有当receive buffer为空时,blocking模式才会等待,而nonb ...

  6. [Asp.net MVC]Bundle合并,压缩js、css文件

    摘要 在web优化中有一种手段,压缩js,css文件,减少文件大小,合并js,css文件减少请求次数.asp.net mvc中为我们提供一种使用c#代码压缩合并js和css这类静态文件的方法. 一个例 ...

  7. 线程系列06,通过CLR代码查看线程池及其线程

    在"线程系列04,传递数据给线程,线程命名,线程异常处理,线程池"中,我们已经知道,每个进程都有一个线程池.可以通过TPL,ThreadPool.QueueUserWorkItem ...

  8. Spring Boot1.5X升级到2.0指南

    原文:https://www.jianshu.com/p/3494c84b4be3 前言 Spring Boot已经发布2.0有4个月多,多了很多新特性,一些坑也慢慢被填上,最近有空,就把本博客中Sp ...

  9. phpExcel导出文件时内存溢出的问题

    在使用PHPExcel导出文件时,经常会因为文件过大导致PHP内存溢出报错,为了解决这个问题,可以使用PHPExcel提供的参数进行优化.这里说的Excel文件过大并不一定是文件大小,更关键的在于文件 ...

  10. @Logback简介

    Ceki Gülcü在Java日志领域世界知名.他创造了Log4J,这个最早的Java日志框架即便在JRE内置日志功能的竞争下仍然非常流行.随后他又着手实现SLF4J这个"简单的日志前端接口 ...