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
閱讀(1590)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
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 組件(一)
搜索
積分與排名
積分 - 1461450
排名 - 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 插件 安裝 和 配置(325792)
2.?Maven 手動添加 JAR 包到本地倉庫(199724)
3.?Lombok 安裝、入門 - 消除冗長的 java 代碼(154842)
4.?java 異常捕捉 ( try catch finally ) 你真的掌握了嗎?(70175)
5.?maven jetty 插件使用(49085)
6.?JSP/Servlet 工作原理(43123)
7.?maven jdk 版本配置(40994)
8.?spring mvc(2):請求地址映射(@RequestMapping)(39572)
9.?二叉樹的深度優先遍歷與廣度優先遍歷 [ C++ 實現 ](31256)
10.?maven 多模塊項目(27896)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 fancydeepin
主站蜘蛛池模板:
欧洲亚洲国产清在高
|
好久久免费视频高清
|
免费看一级一级人妻片
|
韩国免费A级毛片久久
|
7m凹凸精品分类大全免费
|
欧美男同gv免费网站观看
|
亚洲日本中文字幕天堂网
|
亚洲卡一卡2卡三卡4卡无卡三
|
国产色在线|亚洲
|
一个人看的www免费在线视频
|
一级成人a毛片免费播放
|
免费人成视频在线
|
亚洲另类激情综合偷自拍图
|
亚洲乱码一二三四区乱码
|
免费毛片毛片网址
|
亚洲高清视频免费
|
国产成人A亚洲精V品无码
|
日韩亚洲不卡在线视频中文字幕在线观看
|
免费无码午夜福利片
|
免费观看无遮挡www的视频
|
亚洲一级特黄大片无码毛片
|
黄色三级三级三级免费看
|
久久黄色免费网站
|
免费在线观看亚洲
|
亚洲一区免费在线观看
|
久久免费视频一区
|
成年人性生活免费视频
|
久久精品国产亚洲夜色AV网站
|
日韩精品亚洲专区在线影视
|
5g影院5g天天爽永久免费影院
|
久久精品国产精品亚洲
|
亚洲成aⅴ人片久青草影院按摩
|
2021在线永久免费视频
|
亚洲人成图片小说网站
|
美女啪啪网站又黄又免费
|
免费看黄视频网站
|
久久精品国产亚洲AV麻豆网站
|
人人爽人人爽人人片av免费
|
麻豆国产人免费人成免费视频
|
亚洲女人影院想要爱
|
久久精品电影免费动漫
|