设计模式——工厂模式(Factory Method)
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到其子类。
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)的更多相关文章
- [设计模式]工厂模式factory
参考:http://wxg6203.iteye.com/blog/740229 简单工厂模式(simple factory)是类的创建模式,又叫静态工厂方法(static factory method ...
- 设计模式 - 工厂模式(factory pattern) 具体解释
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012515223/article/details/27081511 工厂模式(factory pa ...
- 大话设计模式--工厂模式 factory -- C++实现实例
实现<大话设计模式>的C++版本... 1. 工厂模式 使用的范围是 同一个基类,下面很多子类. (1)这里很容易出现的一个问题n多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就 ...
- 设计模式——工厂方法(Factory Method)
定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. ——DP UML类图 模式说明 抽象业务基类 实际业务类的公共基类,也是工厂要创建的所有对象的父类,这部分 ...
- 设计模式--工厂模式Factory(创建型)
工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTY ...
- c++工厂模式(Factory method)
下面以女娲造黑人,白人,黄种人的例子来介绍一下工厂模式. 1.工厂的接口,相当于造人工厂总部. class IHumanFactory { public: IHumanFactory(void) { ...
- 23种设计模式--工厂模式-Factory Pattern
一.工厂模式的介绍 工厂模式让我们相到的就是工厂,那么生活中的工厂是生产产品的,在代码中的工厂是生产实例的,在直白一点就是生产实例的类,代码中我们常用new关键字,那么这个new出来的实例 ...
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
随机推荐
- archlinux安装的软件
1. 火狐浏览器 #pacman -S firefox 使用ffmpeg播放HTML5的多媒体内容 $sudo pacman -S ffmpeg https://wiki.archlinux.o ...
- java se系列(三) 顺序语句、if...else、switch、While、do-while、for、break、continue
1 顺序语句 语句:使用分号分隔的代码称作为一个语句. 注意:没有写任何代码只是一个分号的时候,也是一条语句,称作空语句. 顺序语句就是按照从上往下的顺序执行的语句. 2 判断(if…else) 什么 ...
- oracle 笔记---(六)__表空间
查看表空间的大小 select tablespace_name,block_size,contents from dba_tablespaces; 查看表空间对应的数据文件 select file_n ...
- 【Tensorflow】 Object_detection之准备数据生成TFRecord
参考:Preparing Inputs 1.PASCAL VOC数据集 数据集介绍: PASCAL Visual Object Classes 是一个图像物体识别竞赛,用来从真实世界的图像中识别特定对 ...
- 安装Newton版Glance
Image Service 本文介绍在controller节点上安装.配置Image服务 glance,镜像存储在本地文件系统 安装准备 controller 节点 ip:192.168.81.11 ...
- 03-struts2获得servetAPI
1 原理 三个域合一的时候相同的键值对以小的域为准.ActionContext 对象创建:每次请求的时候都会创建一个与请求对应的 ActionContext 对象.ActionContext 销毁:请 ...
- Unity3d Attribute 总结
举两个例子,在变量上使用[SerializeFiled]属性,可以强制让变量进行序列化,可以在Unity的Editor上进行赋值. 在Class上使用[RequireComponent]属性,就会在C ...
- poj 1028 Web Navigation
Web Navigation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 31088 Accepted: 13933 ...
- Javascript模块化编程详解
在这篇文章中,我将会回顾一下js模块化编程的基础,并且将会讲到一些真的非常值得一提的进阶话题,包括一个我认为是我自创的模式. 模块化编程是一种非常常见Javascript编程模式.它一般来说可以使得代 ...
- Path类 操作文件类
// Path类 IO命名空间 静态类 不能创建对象类名. string str =@"E:\C#程序设计基础入门教程\(第十一天)\122\22\nee.txt"; ////in ...