设计模式——工厂模式(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 种经典设计模式,它的缺点是增加新产品时会违背 ...
随机推荐
- linux下忘记mysql的root密码
一.处理方案 #1. 结束当前正在运行的mysql进程 /etc/init.d/mysql stop #2. 用mysql安全模式运行并跳过权限验证 mysqld_safe --user=mysql ...
- mongodb 增查改删
我们在 MongoDB 之 你得知道MongoDB是个什么鬼 MongoDB - 1 中学习了如果安装部署一个 MongoDB 如果没看到我的金玉良言的话,就重新打开一次客户端和服务端吧 本章我们 ...
- ansible 命令详解{图片详解}
本文内容来至于http://www.zsythink.net 文件操作模块 命令操作模块 cron 包管理模块
- ListView与ArrayAdapter的搭配使用
在android中,ListView是一种很重要的控件,一般的使用中,常建立一个所需类型的ArrayList,再通过ArrayAdapter把ListView绑定到ArrayList上,通过Array ...
- Beam概念学习系列之PTransform数据处理
不多说,直接上干货! PTransform数据处理 PTransform对PCollection进行并行处理,每次处理1条,例如Filter过滤.Groupby分组.Combine统计.Join关联等 ...
- 生成ks.cfg文件
RHEL 7下生成ks.cfg文件 环境 + RHEL 7 + 字符界面, 没有安装图形界面 软件包安装 + `yum install system-config-kickstart -y` + `y ...
- 转帖:kindeditor编辑区空格被隐藏,导致所见所得不一致的解决办法
1.修改kindereditor-all.js中的 var re = /(\s)<(/)?([\w-:]+)((?:\s+|(?:\s+[\w-:]+)|(?:\s+[\w-:]+=[^\s&q ...
- ASP .NET SVN && emmet 插件
学习 ASP .NET 时间的第三周: 来讲讲如何在 visual studio 2013...上搭载 SVN吧: 废话不多说: One Step: 电脑上已安装 visual studio 201 ...
- 使用waitfor 语句
aitfor语句用于延迟后面语句的执行,可以指定延迟时间长度是具体的时间.参考下面的语句: waitfor delay ’00:01:15’ print N’到时间了’ --也可以不加N 字符串 ...
- Halcon学习笔记——机器视觉应用工程开发思路及相机标定
机器视觉应用工程开发思路 机器视觉应用工程主要可划分为两大部分,硬件部分和软件部分. 1.硬件部分,硬件的选型至关重要,决定了后续工作是否可以正常开展,其中关键硬件部分包括:光源,相机以及镜头. 2. ...