下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android中工廠方法模式的作用是什么
這期內(nèi)容當(dāng)中在下將會給大家?guī)碛嘘P(guān)Android中工廠方法模式的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。一、介紹工廠方法模式(FactoryPattern),是創(chuàng)建型設(shè)計模式之一。工廠方法模式是一種結(jié)構(gòu)簡單的模式,其在我們平時開發(fā)中應(yīng)用很廣泛,也許你并不知道,但是你已經(jīng)使用了無數(shù)次該模式了,如Android中的Activity里的各個生命周期方法,以onCreate方法為例,它就可以看作是一個工廠方法,我們在其中可以構(gòu)造我們的View并通過setContentView返回給framework處理等,相關(guān)內(nèi)容我們下面再講,先看看工廠方法模式定義。二、定義定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪個類。三、使用場景在任何需要生成復(fù)雜對象的地方,都可以使用工廠方法模式。復(fù)雜對象適合使用工廠模式,用new就可以完成創(chuàng)建的對象無需使用工廠模式。四、模式的簡單實現(xiàn)抽象產(chǎn)品類:public
abstract
class
Product
{
/**
*
產(chǎn)品類的抽象方法
*
由具體的產(chǎn)品類去實現(xiàn)
*
*/
public
abstract
void
method();
}具體產(chǎn)品類A:public
class
ConcreteProductA
extends
Product
{
@Override
public
void
method()
{
System.out.println("我是具體的產(chǎn)品A");
}
}具體產(chǎn)品類B:public
class
ConcreteProductB
extends
Product
{
@Override
public
void
method()
{
System.out.println("我是具體的產(chǎn)品B");
}
}抽象工廠類:public
abstract
class
Factory
{
/**
*
抽象工廠方法
*
具體由子類實現(xiàn)
*
*
@return
具體的產(chǎn)品對象
*
*/
public
abstract
Product
createProduct();
}具體工廠類:public
class
ConcreteFactory
extends
Factory
{
/**
*
具體工廠類
*
*/
@Override
public
Product
createProduct()
{
return
new
ConcreteProductA();
}
}客戶類:public
class
Client
{
public
static
void
main(String[]
args)
{
Factory
factory
=
new
ConcreteFactory();
Product
product
=
factory.createProduct();
product.method();
}
}結(jié)果:我是具體的產(chǎn)品A這里的幾個角色都很簡單,主要分為四大模塊,一是抽象工廠,其為工廠方法模式的核心;二是具體工廠,其實現(xiàn)了具體的業(yè)務(wù)邏輯;三是抽象產(chǎn)品,是工廠方法模式所創(chuàng)建的產(chǎn)品的父類;四是具體產(chǎn)品,為實現(xiàn)抽象產(chǎn)品的某個具體產(chǎn)品的對象。上述的代碼中我們在Client類中構(gòu)造了一個工廠對象,并通過其生產(chǎn)了一個產(chǎn)品對象,這里我們得到的產(chǎn)品對象是ConcreteProductA的實例,如果想得到ConcreteProductB的實例,更改ConcreteFactory中的邏輯即可:public
class
ConcreteFactory
extends
Factory
{
/**
*
具體工廠類
*
*/
@Override
public
Product
createProduct()
{
//return
new
ConcreteProductA();
return
new
ConcreteProductB();
}
}這種方式比較常見,需要哪一個產(chǎn)品就生產(chǎn)哪一個,有時候也可以利用反射的方式更簡潔的來生產(chǎn)具體產(chǎn)品對象,此時,需要在工廠方法的參數(shù)列表中傳入一個Class類來決定是哪一個產(chǎn)品類:public
abstract
class
Factory
{
/**
*
抽象工廠方法
*
具體由子類實現(xiàn)
*
*
@param
clz
產(chǎn)品對象類類型
*
*
@return
具體的產(chǎn)品對象
*
*/
public
abstract
<T
extends
Product>
T
createProduct(Class<T>
clz);
}對于具體的工廠類,則通過反射獲取類的示例即可:public
class
ConcreteFactory
extends
Factory
{
/**
*
具體工廠類
*
*/
@SuppressWarnings("unchecked")
@Override
public
<T
extends
Product>
T
createProduct(Class<T>
clz)
{
Product
product
=
null;
try
{
product
=
(Product)
Class.forName(clz.getName()).newInstance();
}
catch
(Exception
e)
{
e.printStackTrace();
}
return
(T)product;
}
}最后在看看Client中的實現(xiàn):public
class
Client
{
public
static
void
main(String[]
args)
{
Factory
factory
=
new
ConcreteFactory();
Product
product
=
factory.createProduct(ConcreteProductB.class);
product.method();
}
}需要哪一個類的對象就傳入哪一個類的類型即可,這種方法比較簡潔、動態(tài),如果你不喜歡這種方式,也可以嘗試為每一個產(chǎn)品都定義一個具體的工廠,各司其職。public
class
ConcreteFactoryA
extends
Factory
{
/**
*
具體工廠類
**/
@Override
public
Product
createProduct()
{
return
new
ConcreteProductA();
}
}
public
class
ConcreteFactoryB
extends
Factory
{
/**
*
具體工廠類
**/
@Override
public
Product
createProduct()
{
return
new
ConcreteProductB();
}
}
public
class
Client
{
public
static
void
main(String[]
args)
{
Factory
factoryA
=
new
ConcreteFactoryA();
Product
productA
=
factoryA.createProduct();
productA.method();
Factory
factoryB
=
new
ConcreteFactoryB();
Product
productB
=
factoryB.createProduct();
productB.method();
}
}像這樣擁有多個工廠的方式我們稱為多工廠方法模式,同樣的,回到我們最初的那個工廠方法模式,當(dāng)我們的工廠只有一個的時候,我們還是為工廠提供了一個抽象類,那么,我們是否可以將其簡化掉呢?如果確定你的工廠類只有一個,那么簡化掉抽象類是肯定沒問題的,我們只需要將對應(yīng)的工廠方法改為靜態(tài)方法即可:public
class
Factory
{
/**
*
具體工廠類
**/
@Override
public
static
Product
createProduct()
{
return
new
ConcreteProductA();
}
}像這樣的方式又稱為簡單工廠模式或靜態(tài)工廠模式,它是工廠方法模式的一個弱化版本。其實到這里大家應(yīng)該可以發(fā)現(xiàn),工廠方法模式是完全符合設(shè)計原則的,其降低了對象之間的耦合度,而且,工廠方法模式依賴于抽象的架構(gòu),其將實例化的任務(wù)交由子類去完成,有非常好的擴(kuò)展性。五、Android源碼中的工廠方法模式Activ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 標(biāo)題14:2025年度網(wǎng)絡(luò)安全監(jiān)測與預(yù)警服務(wù)合同2篇
- 二零二五年技術(shù)轉(zhuǎn)讓合同具體條款2篇
- 二零二五年度酒吧經(jīng)營場所租賃合同范本(專業(yè)解析版)2篇
- 二零二五年度建筑工地環(huán)境監(jiān)測與節(jié)能管理系統(tǒng)合同3篇
- 二零二五年度智能油煙機銷售安裝一體化服務(wù)合同3篇
- 二零二五年度高壓輸電線路維修合同書3篇
- 二零二五版辦公室租賃合同員工福利及權(quán)益保障協(xié)議3篇
- 二零二五年度環(huán)境監(jiān)測設(shè)備租賃與維護(hù)合同范本3篇
- 二零二五年度林地租賃合同協(xié)議書2篇
- 展會印刷品制作合同(2篇)
- EPC總承包項目中的質(zhì)量管理體系
- 滬教版小學(xué)語文古詩(1-4)年級教材
- 外科醫(yī)生年終述職總結(jié)報告
- 橫格紙A4打印模板
- CT設(shè)備維保服務(wù)售后服務(wù)方案
- 重癥血液凈化血管通路的建立與應(yīng)用中國專家共識(2023版)
- 兒科課件:急性細(xì)菌性腦膜炎
- 柜類家具結(jié)構(gòu)設(shè)計課件
- 陶瓷瓷磚企業(yè)(陶瓷廠)全套安全生產(chǎn)操作規(guī)程
- 煤炭運輸安全保障措施提升運輸安全保障措施
- JTGT-3833-2018-公路工程機械臺班費用定額
評論
0/150
提交評論