蜀道之难。难于上青天,侧身西望长咨嗟

                 ——蜀道难

类图:

定义Operation类

 package cn.no1.simplefactory;

 public abstract class Operation {

     private double numA;
private double numB; public double getNumA() {
return numA;
} public void setNumA(double numA) {
this.numA = numA;
} public double getNumB() {
return numB;
} public void setNumB(double numB) {
this.numB = numB;
} public abstract double calculate ();
}

定义其四个子类

 package cn.no1.simplefactory;

 public class OperationAdd extends Operation{

     @Override
public double calculate() {
// TODO Auto-generated method stub
return this.getNumA() + this.getNumB();
} }
public class OperationSub extends Operation { @Override
public double calculate() {
// TODO Auto-generated method stub
return this.getNumA()-this.getNumB();
} }
public class OperationMultiply extends Operation{ @Override
public double calculate() {
// TODO Auto-generated method stub
return this.getNumA()*this.getNumB();
} }
public class OperationDivide extends Operation{ @Override
public double calculate() {
// TODO Auto-generated method stub
return this.getNumA()/this.getNumB();
} }

定义工厂类

 package cn.no1.simplefactory;

 public class OperationFactory {

     public static Operation createOperation(String operator){
Operation operation = null;
switch (operator) {
case "+":
operation = new OperationAdd();
break;
case "-":
operation = new OperationSub();
break;
case "*":
operation = new OperationMultiply();
break;
case "/":
operation = new OperationDivide();
break;
     }
return operation;
}
}

测试类:

 package cn.no1.simplefactory;

 import java.util.Scanner;

 public class _Test {

     public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("输入数字1:");
double numA = sc.nextDouble();
System.out.println("输入数字2:");
double numB = sc.nextDouble();
System.out.println("输入操作符:");
String operator = sc.next();
sc.close();
Operation operation = OperationFactory.createOperation(operator);
operation.setNumA(numA);
operation.setNumB(numB);
double result = operation.calculate();
System.out.println("计算结果是:"+result);
}
}

Java学习笔记——设计模式之一.简单工厂的更多相关文章

  1. Java学习笔记——设计模式之五.工厂方法

    水边一只青蛙在笑 --石头和水 工厂方法模式(Factory Method),定义了一个用于创建对象的接口,让实现类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 这里在简单和工厂的基础上 ...

  2. Java学习笔记——设计模式之二.策略模式

    明确是王道 --Clean Code 先定义策略类 package cn.no2.strategy; public abstract class Strategy { //省略属性 //算法方法 pu ...

  3. java学习笔记 (7) —— 实现简单的上传处理

    1.下载apache 的 commons-fileupload.jar 包及 commons-io.jar 2.引入到lib 文件夹下 3.新建uploadApache.jsp <%@ page ...

  4. Java学习笔记——设计模式之十.观察者模式

     观察者模式(Observer),定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象.这个主题对象在状态发生变化时,会通知所有观察者对象,使他们能够自动更新自己. Subject类: ...

  5. Java学习笔记——设计模式之九.建造者模式

     建造者模式(Builder),将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. Product类: package cn.happy.design_pattern._09b ...

  6. Java学习笔记-设计模式

    常见设计模式有23种,设计模式是解决某一类问题最行之有效的方法 单例设计模式 解决一个类在内存中只存在一个对象 思想 为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象 还为了让其他程序可以 ...

  7. Java学习笔记——设计模式之四.代理模式

    To be, or not to be: that is the question. --<哈姆雷特> 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问. 上代码: p ...

  8. Java学习笔记——设计模式之三.装饰模式

    函数应该做一件事,做好这件事,只做这一件事. --Clean Code 装饰模式,上代码: 先定义零件类: package cn.no3.decorator.template; public abst ...

  9. Java学习笔记——设计模式之八.外观模式

    外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 子系统: package cn.happy.design_patter ...

随机推荐

  1. suse安装svn服务端和客户端的使用

    suse安装svn服务端 一. 安装服务端 配置网络安装源(suse11sp1为例) 新建11.1.repo11.1为软件源名称,可自定义文件并添加如下内容后保存 linux-e0xg:/etc/zy ...

  2. Nagios安装部署

    p.MsoNormal,li.MsoNormal,div.MsoNormal { margin: 0cm; margin-bottom: .0001pt; line-height: 150%; fon ...

  3. Struts2基础学习(三)—Result和数据封装

    一.Result      Action处理完用户请求后,将返回一个普通的字符串,整个普通字符串就是一个逻辑视图名,Struts2根据逻辑视图名,决定响应哪个结果,处理结果使用<result&g ...

  4. JavaScript基础学习(六)—函数

    一.函数的定义 1.function语句形式 //1.function语句式 function test1(){ alert("I am test1"); } test1(); 2 ...

  5. Apriori算法介绍(Python实现)

    导读: 随着大数据概念的火热,啤酒与尿布的故事广为人知.我们如何发现买啤酒的人往往也会买尿布这一规律?数据挖掘中的用于挖掘频繁项集和关联规则的Apriori算法可以告诉我们.本文首先对Apriori算 ...

  6. 【shell编程基础2】shell组合应用之一:重定向和逻辑

    这篇主要讲下 数据的重定向,在shell脚本中有些重要的输出重定向为文件的形式输出来 逻辑方式的多个命令组合,可以很方便的进行一些判断 数据流重定向 数据流重定向:大致上的意思就是本该输出到屏幕上的数 ...

  7. 【C和指针】笔记1

    数据 基本数据类型 整型家族:包含字符,短整型,整型和长整型 整型相互之间大小规定如下: 长整型至少和整型一样长,而整型至少应该和短整型一样长. short int至少16位,long int至少32 ...

  8. JQ实现选中以后就左右移动

    <head> <meta charset="utf-8" /> <title>select_option移动</title> < ...

  9. 区分词法作用域(js)与动态作用域(精!)

    在js学习中,词法作用域是必须要掌握的! 在这里,我将总结一下<你不知道的JS>一书中词法作用域的重点并分享给大家! 首先带来一段代码示例: function foo(){ console ...

  10. 使用vue-cli构建多页面应用+vux(二)

    当我们安装好vue-cli完整的项目以后,我们开始对它进行改造,此处参考了简书某个作者的,附上原文链接 http://www.jianshu.com/p/43697bdee974以及此文例子地址htt ...