工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。

UML图:

  运算基类:

  

package com.cnblog.clarck;

/**
* 数据运算基类
*
* @author clarck
*
*/
public class Operation {
private double mNmberA = 0;
private double mNumberB = 0; public double getNumberA() {
return mNmberA;
} public void setNmberA(double numberA) {
this.mNmberA = numberA;
} public double getNumberB() {
return mNumberB;
} public void setNumberB(double numberB) {
this.mNumberB = numberB;
} /**
* 获取运算结果
* @return
*/
public double getResult() {
double result = 0;
return result;
} }

  

  具体产品类:

package com.cnblog.clarck;

/**
* 加法类
*
* @author clarck
*
*/
public class OperationAdd extends Operation { @Override
public double getResult() {
double result = 0;
result = getNumberA() + getNumberB();
return result;
} }

  

package com.cnblog.clarck;

/**
* 减法类
*
* @author clarck
*
*/
public class OperationSub extends Operation { @Override
public double getResult() {
double result = getNumberA() - getNumberB();
return result;
} }
package com.cnblog.clarck;

/**
* 乘法
*
* @author clarck
*
*/
public class OperationMul extends Operation { @Override
public double getResult() {
double result = getNumberA() * getNumberB();
return result;
} }
package com.cnblog.clarck;

/**
* 除法类
*
* @author clarck
*
*/
public class OperationDiv extends Operation { @Override
public double getResult() {
if (getNumberB() == 0) {
throwException();
} double result = getNumberA() / getNumberB();
return result;
} private void throwException() {
try {
throw new Exception("the div number can't be zero.");
} catch (Exception e) {
e.printStackTrace();
}
}
}

  工厂类接口:

package com.cnblog.clarck;

/**
* 算法工厂
*
* @author clarck
*
*/
public interface IFactory {
public Operation createOperation();
}

  工厂类:

package com.cnblog.clarck;

/**
* 加法工厂
*
* @author clarck
*
*/
public class AddFactory implements IFactory { @Override
public Operation createOperation() {
return new OperationAdd();
} }
package com.cnblog.clarck;

/**
* 减法工厂
*
* @author clarck
*
*/
public class SubFactory implements IFactory { @Override
public Operation createOperation() {
return new OperationSub();
} }
package com.cnblog.clarck;

/**
* 乘法
*
* @author clarck
*
*/
public class MulFactory implements IFactory { @Override
public Operation createOperation() {
return new OperationMul();
} }
package com.cnblog.clarck;

/**
* 除法工厂
*
* @author clarck
*
*/
public class DivFactory implements IFactory { @Override
public Operation createOperation() {
return new OperationDiv();
} }

  运算符号类:

package com.cnblog.clarck;

/**
* 加法, 减法, 乘法, 除法
*
* @author clarck
*
*/
public enum OperationSymbol {
ADDITION, SUBTRACTION, MULTIPLICATION, DIVISION
}

  测试类:

package com.cnblog.clarck;

/**
* 测试类
*
* @author clarck
*
*/
public class Client {
public static void main(String[] args) {
IFactory operFactory = new AddFactory();
Operation operation = operFactory.createOperation();
operation.setNmberA(1);
operation.setNumberB(2);
double result = operation.getResult();
System.out.println("add result: " + result); operFactory = new SubFactory();
Operation subOperation = operFactory.createOperation();
subOperation.setNmberA(1);
subOperation.setNumberB(2);
double subResult = subOperation.getResult();
System.out.println("sub result: " + subResult); operFactory = new MulFactory();
Operation mulOperation = operFactory.createOperation();
mulOperation.setNmberA(1);
mulOperation.setNumberB(2);
double mulResult = mulOperation.getResult();
System.out.println("mul result: " + mulResult); operFactory = new DivFactory();
Operation divOperation = operFactory.createOperation();
divOperation.setNmberA(1);
divOperation.setNumberB(2);
double divResult = divOperation.getResult();
System.out.println("div result: " + divResult); }
}

设计模式——工厂模式(Factory Method)的更多相关文章

  1. [设计模式]工厂模式factory

    参考:http://wxg6203.iteye.com/blog/740229 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method ...

  2. 设计模式 - 工厂模式(factory pattern) 具体解释

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...

  3. 大话设计模式--工厂模式 factory -- C++实现实例

    实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...

  4. 设计模式——工厂方法(Factory Method)

    定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. ——DP UML类图 模式说明 抽象业务基类 实际业务类的公共基类,也是工厂要创建的所有对象的父类,这部分 ...

  5. 设计模式--工厂模式Factory(创建型)

    工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTY ...

  6. c++工厂模式(Factory method)

    下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...

  7. 23种设计模式--工厂模式-Factory Pattern

    一.工厂模式的介绍       工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...

  8. 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)

    原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...

  9. 设计模式-03工厂方法模式(Factory Method Pattern)

    插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...

随机推荐

  1. 2019.3.20 I/O相关

    I/O 相关简介 什么是I/O? IO,即Input (输入)和Output (输出)的首字母缩写. 什么是流? 流(Stream)是抽象概念,它代表任何有能力产出数据的数据源对象或者是与能力接收数据 ...

  2. SpringCloud---服务治理---Spring Cloud Eureka

    1.概述 1.1 Spring Cloud Eureka是Spring Cloud Netflix微服务套件中的一部分,基于Netflix Eureka做了二次封装,主要负责完成微服务架构中的服务治理 ...

  3. 8086键盘输入实验——《x86汇编语言:从实模式到保护模式》读书笔记07

    1.BIOS中断 我们可以为所有中断类型自定义中断处理过程,包括内部中断.硬件中断和软中断. BIOS中断,又称BIOS功能调用,主要是为了方便地使用最基本的硬件访问功能.通常,为了区分针对同一硬件的 ...

  4. elasticsearch 2.4.0执行update的时候发现的一个问题

    请关注inline参数的变化 正确: POST /test/type1/1/_update{ "script" : { "inline": "ctx. ...

  5. Linux分区扩容

    lz在MAC上面使用Linux虚拟机,开始只建了一个分区,挂载在”/”目录下.现在硬盘空间不够了,所以lz就来给这个分区扩容. 首先,当然是要给虚拟机分配更多的硬盘空间喽(lz用的是VMware Fu ...

  6. 负载均衡服务器中存在大量的TIME_WAIT怎么解决

    首先需要明白什么是TIME_WAIT.TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态.这个状态默认情况下是2倍的MS ...

  7. 遇见phpDesigner我笑了 PHP开发利器

    phpDesigner实在太好用了 相信许多PHP同胞谈到PHP开发工具的时候,都会想到Zend Studio.Eclipse等开发工具,这些工具的确非常的强大强悍,但复杂的配置满屏幕的英文并不适合所 ...

  8. Hashtable和HashMap的区别,Properties类的简单使用

    一.Java Properties类 Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置 ...

  9. HDU 5318——The Goddess Of The Moon——————【矩阵快速幂】

    The Goddess Of The Moon Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/ ...

  10. 关于“System.Data.ProviderIncompatibleException”类型的异常

    作为刚学习MVC的菜鸟,因为平常的不努力学习.看书,所以只能参考官方的教程学习操作新手入门 一步一步认真的做,前天晚上出现了一个关于数据库连接字符串错误的问题,自己查了很多资料, 问了许多大神,他们的 ...