fancydeepin
毋意,毋必,毋固,毋我。
BlogJava
首页
新随笔
联系
聚合
管理
随笔-126 评论-247 文章-5 trackbacks-0
java 工厂方法模式
工厂方法模式
又称为
多态性工厂模式
或
虚拟构造子模式
;与简单工厂模式不同,在工厂方法模式中,核心的工厂类不再负责所有具体产品实例的创建,
而仅仅是需要负责给出具体工厂子类必须实现的接口,让工厂子类去负责具体产品实例的创建。
工厂方法模式的一般性结构是:
与
简单工厂模式
类似的,下面使用工厂方法模式
来模拟一个简单的加减乘除的计算器
:
工厂方法模式结构示意图:
共同运算接口:Operation.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 运算接口
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
interface
Operation
{
/**
* <B>方法描述:</B>
* <p style="margin-left:20px;color:#A52A2A;">
* 计算两个操作数的运算值
*
@param
operand1 <span style="color: #008080;"> 操作数1 </span>
*
@param
operand2 <span style="color: #008080;"> 操作数2 </span>
*
@return
<span style="color: #008080;"> 返回两个操作数的运算值 </span>
*/
public
double
operate(Number operand1, Number operand2);
}
加法实现类:OperationAdd.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 加法实现类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
OperationAdd
implements
Operation
{
@Override
public
double
operate(Number operand1, Number operand2)
{
return
operand1.doubleValue()
+
operand2.doubleValue();
}
}
减法实现类:OperationSubtract.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 减法实现类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
OperationSubtract
implements
Operation
{
@Override
public
double
operate(Number operand1, Number operand2)
{
return
operand1.doubleValue()
-
operand2.doubleValue();
}
}
乘法实现类:OperationMultiply.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 乘法实现类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
OperationMultiply
implements
Operation
{
@Override
public
double
operate(Number operand1, Number operand2)
{
return
operand1.doubleValue()
*
operand2.doubleValue();
}
}
除法实现类:OperationDivision.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 除法实现类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
OperationDivision
implements
Operation
{
@Override
public
double
operate(Number operand1, Number operand2)
{
try
{
if
(operand2.doubleValue()
==
0.0
)
{
throw
new
Exception(
"
警告:被除数不能为0
"
);
}
else
{
return
operand1.doubleValue()
/
operand2.doubleValue();
}
}
catch
(Exception e)
{e.printStackTrace();}
return
0
;
}
}
抽象工厂接口:OperationCreator.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 抽象工厂接口
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
interface
OperationCreator
{
/**
* <B>方法描述:</B>
* <p style="margin-left:20px;color:#A52A2A;">
* 获取运算实例对象
*
@return
<span style="color: #008080;"> 返回运算实例对象 </span>
*/
public
Operation getInstance();
}
加法创造器:CreatorAdd.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 加法
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
CreatorAdd
implements
OperationCreator
{
@Override
public
Operation getInstance()
{
return
new
OperationAdd();
}
}
减法创造器:CreatorSubtract.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 减法
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
CreatorSubtract
implements
OperationCreator
{
@Override
public
Operation getInstance()
{
return
new
OperationSubtract();
}
}
乘法创造器:CreatorMultiply.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 乘法
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
CreatorMultiply
implements
OperationCreator
{
@Override
public
Operation getInstance()
{
return
new
OperationMultiply();
}
}
除法创造器:CreatorDivision.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 除法
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
CreatorDivision
implements
OperationCreator
{
@Override
public
Operation getInstance()
{
return
new
OperationDivision();
}
}
客户端测试类:Client.java
package
pattern.factory.method;
/**
* -----------------------------------------
* @描述 客户端测试类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
Client
{
private
static
Operation operation;
private
static
OperationCreator operationCreator;
public
static
void
main(String[] args)
{
operationCreator
=
new
CreatorMultiply();
operation
=
operationCreator.getInstance();
System.out.println(operation.operate(
4
,
2.5
));
operationCreator
=
new
CreatorDivision();
operation
=
operationCreator.getInstance();
System.out.println(operation.operate(
40
,
2.5
));
System.out.println(operation.operate(
40
,
0
));
}
}
后台打印输出结果:
10.0
16.0
java.lang.Exception
: 警告:被除数不能为0
at pattern.factory.method.OperationDivision.operate(
OperationDivision.java:
16
)
at pattern.factory.method.Client.main(
Client.java:
23
)
posted on 2012-07-30 17:43
fancydeepin
阅读(1907)
评论(0)
编辑
收藏
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
github
个人主页
beanutil
jutil
jexcel
orc
随笔分类
(8)
junit
maven(8)
随笔档案
(104)
2015年6月 (8)
2015年2月 (1)
2015年1月 (1)
2014年9月 (1)
2014年8月 (3)
2014年6月 (10)
2014年5月 (3)
2014年3月 (5)
2013年10月 (1)
2013年9月 (2)
2013年4月 (1)
2013年3月 (2)
2013年2月 (11)
2012年11月 (3)
2012年10月 (14)
2012年8月 (15)
2012年7月 (13)
2012年6月 (10)
最新随笔
1. maven 为测试环境、生产环境等不同环境打包
2. maven 多模块项目
3. nexus 搭建 maven 私服
4. maven 镜像
5. maven jetty 插件使用
6. maven jdk 版本配置
7. eclipse maven plugin 插件 安装 和 配置
8. maven 安装
9. ORCP : 从数据库表到 java 对象生成的 eclipse 插件
10. jexcel 读写EXCEL
11. linux 系列
12. spring mvc(2):请求地址映射(@RequestMapping)
13. spring mvc(1):基础入门
14. Java 验证码、二维码
15. GXT —— TreePanel 组件(一)
搜索
积分与排名
积分 - 1459441
排名 - 15
最新评论
1. re: Maven 手动添加 JAR 包到本地仓库[未登录]
刚安装好的maven,仓库里没有jar包,如何添加jar包呢?
--Firefly
2. re: java 建造者模式(Builder)
多谢,讲的很清楚
--Nimo
3. re: Maven 手动添加 JAR 包到本地仓库
很好很强大, 完美的解决了我的问题。。。
--klose
4. re: eclipse maven plugin 插件 安装 和 配置
@fancydeepin
链接还是失效了啊
--菜鸟一号
5. re: Maven 手动添加 JAR 包到本地仓库[未登录]
@呼吸~
你好,请问,怎么设置代理呢?
--paul
阅读排行榜
1. eclipse maven plugin 插件 安装 和 配置(325693)
2. Maven 手动添加 JAR 包到本地仓库(199568)
3. Lombok 安装、入门 - 消除冗长的 java 代码(154801)
4. java 异常捕捉 ( try catch finally ) 你真的掌握了吗?(70138)
5. maven jetty 插件使用(49019)
6. JSP/Servlet 工作原理(43088)
7. maven jdk 版本配置(40957)
8. spring mvc(2):请求地址映射(@RequestMapping)(39521)
9. 二叉树的深度优先遍历与广度优先遍历 [ C++ 实现 ](31203)
10. maven 多模块项目(27831)