简单工厂的实现

实现一个计算器:要求输入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. Codeforces Round #287 (Div. 2) A. Amr and Music 水题

    A. Amr and Music time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  2. python实现并查集

    并查集是这样的数据结构:有一大堆的数据,把一些元素放在一个集合当中,另外一些元素放在另一个一个集合当中. 对于它的操作有:查看两个元素是否在一个集合当中.合并两个元素. 合并的时候采取的策略是这样的: ...

  3. spring---aop(2)---Spring AOP的JDK动态代理

    写在前面 spring 事务是springAOP 的一个实现.我们以分析spring的事务,来分析spring的AOP实现. 基本知识 如果目标方法被spring的事务声明,则执行该目标方法的对象就会 ...

  4. ansible saltstart puppet

    百台以下用ansible , 百台-千台用saltstart , 千台以上用puppet

  5. vim选择命令

    最近在做一些无聊的客户化OSD,发现结合vim的一些命令更简单. 1.全选:ggVG(V:shift+v) 解释是:gg 让光标移到首行,在vim才有效,vi中无效:V 是进入Visual(可视)模式 ...

  6. 在win7下安装VC6.0

    一.以系统管理员的身份执行VC6.0安装文件 二.在安装或者使用VisualC++6.0时,凡是出现兼容性问题提示对话框,一律按下面方式处理--把"不再显示此消息"打上勾,然后选择 ...

  7. .Net高级技术——垃圾收集器

    垃圾收集器概述 大排档和学校食堂.一个是别人帮你收拾盘子,一个是自己收拾盘子. 垃圾收集GC(Garbage Collection).内存的分配.回收不需要程序员操心,程序员只要需要的时候new就可以 ...

  8. Adding an instance to a MEF container

    How can you add an already created instance to a MEF container/cataloge to use when resolving Import ...

  9. C#程序集系列10,强名称程序集

    当一个程序集的名称,版本,文化,Public Key都做了设置,就可以把这个程序集叫做"强名称程序集".强名称程序集可以防止被仿冒或篡改.本篇首先创建一个强名称程序集,接着模拟篡改 ...

  10. extjs表单验证

    extjs表单验证 //放在onReady的function(){}中 Ext.QuickTips.init(); //为组件提供提示信息功能,form的主要提示信息就是客户端验证的错误信息. Ext ...