简单工厂的实现

实现一个计算器:要求输入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. hdu 4277 USACO ORZ DFS

    USACO ORZ Time Limit: 5000/1500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

  2. CodeForces 32C. Flea 水题

    C. Flea time limit per test 2 seconds memory limit per test 256 megabytes input standard input outpu ...

  3. ThinkPHP中I('post.')与create()方法的对比

    简要归纳: 1.二者都可用来接收post表单提交的数据. 2.I('post.')方法可直接接收赋值给变量如$post=I('post.'),create()方法源于父类模型封装,需先实例化父类模型, ...

  4. ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE

    http://www.chinaz.com/web/2012/1119/282540.shtml 编码一直是让新手头疼的问题,特别是 GBK.GB2312.UTF-8 这三个比较常见的网页编码的区别, ...

  5. 国产Linux滋生腐败

    回想过去,2002年12月11日至12日,信息产业部与科技部联合主办"Linux软件与应用猜測研讨会".影响中国IT业的重要人士,包含政府决策者.学界权威.主要Linux推动厂商等 ...

  6. mysql索引知识点汇总

    一.索引基础知识 1.什么叫数据库索引? 答:索引是对数据库中一列或者多列的值进行排序的一种数据结构.重点:对列的值进行排序的数据结构. 使用索引可以快速访问数据库中的记录 2.索引的主要用途是什么? ...

  7. msgpack传文件

    msgpack传文件 procedure TForm1.Button1Click(Sender: TObject);var ms, ms2: TMemoryStream; pack: TSimpleM ...

  8. Delphi-Cross-Socket

    Delphi-Cross-Socket GITHUB:https://github.com/winddriver/Delphi-Cross-Socket # Delphi 跨平台 Socket 通讯库 ...

  9. pytest文档18-配置文件pytest.ini

    前言 pytest配置文件可以改变pytest的运行方式,它是一个固定的文件pytest.ini文件,读取配置信息,按指定的方式去运行. ini配置文件 pytest里面有些文件是非test文件 py ...

  10. 测试 Nginx 作为前端下各种模式的性能

    测试环境: 1:Nginx 独立处理静态面页请求 5000,开了60个线程 2:Nginx作为前端请求转给 Weblogic 12c 处理 (Spring 4.0平台下的动态面页效果如图) 3:Ngi ...