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
閱讀(1912)
評論(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 組件(一)
搜索
積分與排名
積分 - 1462064
排名 - 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 插件 安裝 和 配置(325813)
2.?Maven 手動添加 JAR 包到本地倉庫(199757)
3.?Lombok 安裝、入門 - 消除冗長的 java 代碼(154854)
4.?java 異常捕捉 ( try catch finally ) 你真的掌握了嗎?(70185)
5.?maven jetty 插件使用(49104)
6.?JSP/Servlet 工作原理(43141)
7.?maven jdk 版本配置(41003)
8.?spring mvc(2):請求地址映射(@RequestMapping)(39588)
9.?二叉樹的深度優先遍歷與廣度優先遍歷 [ C++ 實現 ](31270)
10.?maven 多模塊項目(27910)
Powered by:
博客園
模板提供:
滬江博客
Copyright ©2025 fancydeepin
主站蜘蛛池模板:
安顺市
|
东辽县
|
安陆市
|
延寿县
|
望奎县
|
碌曲县
|
紫金县
|
云南省
|
子长县
|
长汀县
|
张掖市
|
安平县
|
十堰市
|
湛江市
|
思南县
|
汶川县
|
富川
|
福海县
|
鸡西市
|
库伦旗
|
扬中市
|
迁安市
|
麻阳
|
丽江市
|
渑池县
|
建阳市
|
甘肃省
|
郎溪县
|
久治县
|
固始县
|
屏边
|
西林县
|
吉安市
|
个旧市
|
盐山县
|
蒙山县
|
吴忠市
|
甘泉县
|
巴马
|
武山县
|
蚌埠市
|