fancydeepin
毋意,毋必,毋固,毋我。
BlogJava
首页
新随笔
联系
聚合
管理
随笔-126 评论-247 文章-5 trackbacks-0
java 简单工厂模式
简单工厂模式
又称为
静态工厂方法模式
,是工厂模式中的一种形态之一,是一个很根本的设计模式;
简单工厂模式一般涉及三个角色:工厂角色、具体产品角色、抽象产品角色,模式的核心是工厂类,这个类含有必要的逻辑判断,
它根据传进的不同参数来判断应当创建哪一个具体产品类的实例,而客户端则可以免去直接创建具体产品实例,而仅仅负责"消费"产品,这种做法很好的实现了责任的分割。
简单工厂的一般性结构:
根据模式的这个结构,下面来模拟一个简单的加减乘除的计算器:
简单工厂结构示意图:
共同接口:Operation.java
package
pattern.simple.factory;
/**
* -----------------------------------------
* @描述 运算接口
* @作者 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.simple.factory;
/**
* -----------------------------------------
* @描述 加法实现类
* @作者 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.simple.factory;
/**
* -----------------------------------------
* @描述 减法实现类
* @作者 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.simple.factory;
/**
* -----------------------------------------
* @描述 乘法实现类
* @作者 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.simple.factory;
/**
* -----------------------------------------
* @描述 除法实现类
* @作者 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
;
}
}
运算符异常类:OperatorNotFoundExection.java
package
pattern.simple.factory;
/**
* -----------------------------------------
* @描述 运算符异常类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
OperatorNotFoundExection
extends
Exception
{
private
static
final
long
serialVersionUID
=
1L
;
public
OperatorNotFoundExection(String errorMsg)
{
super
(errorMsg);
}
}
简单工厂实现类:OperationFactory.java
package
pattern.simple.factory;
/**
* -----------------------------------------
* @描述 简单工厂类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
OperationFactory
{
//
私有化构造子,防止简单工厂类实例被创建
private
OperationFactory()
{
}
/**
* <B>方法描述:</B>
* <p style="margin-left:20px;color:#A52A2A;">
* 获取与参数运算符相匹配的类实例
*
@param
operator <span style="color: #008080;"> 取值范围:<BR>
* ① '+' <BR>
* ② '-' <BR>
* ③ '*' <BR>
* ④ '/' <BR></span>
*
@return
<span style="color: #008080;"> 返回与参数运算符相匹配的类实例 </span>
*/
public
static
Operation getInstance(
char
operator)
{
switch
(operator)
{
case
'
+
'
:
return
new
OperationAdd();
case
'
-
'
:
return
new
OperationSubtract();
case
'
*
'
:
return
new
OperationMultiply();
case
'
/
'
:
return
new
OperationDivision();
default
:
try
{
throw
new
OperatorNotFoundExection(
"
ERROR:找不到与参数
"
+
operator
+
"
相匹配的运算符!
"
);
}
catch
(OperatorNotFoundExection e)
{e.printStackTrace();}
}
return
null
;
}
}
客户端测试类:Client.java
package
pattern.simple.factory;
/**
* -----------------------------------------
* @描述 客户端测试类
* @作者 fancy
* @邮箱 fancydeepin@yeah.net
* @日期 2012-7-30 <p>
* -----------------------------------------
*/
public
class
Client
{
public
static
void
main(String[] args)
{
Operation op
=
OperationFactory.getInstance(
'
*
'
);
System.out.println(op.operate(
4
,
2.5
));
op
=
OperationFactory.getInstance(
'
/
'
);
System.out.println(op.operate(
40
,
2.5
));
System.out.println(op.operate(
40
,
0
));
}
}
后台打印输出结果:
10.0
16.0
java.lang.Exception:
警告:被除数不能为0
at pattern.simple.factory.OperationDivision.operate(
OperationDivision.java:
16
)
at pattern.simple.factory.Client.main(
Client.java:
18
)
posted on 2012-07-30 14:36
fancydeepin
阅读(1582)
评论(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 组件(一)
搜索
积分与排名
积分 - 1459452
排名 - 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 代码(154802)
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++ 实现 ](31204)
10. maven 多模块项目(27832)