




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
【移動應用開發(fā)技術】Android中工廠方法模式的作用是什么
這期內容當中在下將會給大家?guī)碛嘘PAndroid中工廠方法模式的作用是什么,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。一、介紹工廠方法模式(FactoryPattern),是創(chuàng)建型設計模式之一。工廠方法模式是一種結構簡單的模式,其在我們平時開發(fā)中應用很廣泛,也許你并不知道,但是你已經使用了無數(shù)次該模式了,如Android中的Activity里的各個生命周期方法,以onCreate方法為例,它就可以看作是一個工廠方法,我們在其中可以構造我們的View并通過setContentView返回給framework處理等,相關內容我們下面再講,先看看工廠方法模式定義。二、定義定義一個用于創(chuàng)建對象的接口,讓子類決定實例化哪個類。三、使用場景在任何需要生成復雜對象的地方,都可以使用工廠方法模式。復雜對象適合使用工廠模式,用new就可以完成創(chuàng)建的對象無需使用工廠模式。四、模式的簡單實現(xiàn)抽象產品類:public
abstract
class
Product
{
/**
*
產品類的抽象方法
*
由具體的產品類去實現(xiàn)
*
*/
public
abstract
void
method();
}具體產品類A:public
class
ConcreteProductA
extends
Product
{
@Override
public
void
method()
{
System.out.println("我是具體的產品A");
}
}具體產品類B:public
class
ConcreteProductB
extends
Product
{
@Override
public
void
method()
{
System.out.println("我是具體的產品B");
}
}抽象工廠類:public
abstract
class
Factory
{
/**
*
抽象工廠方法
*
具體由子類實現(xiàn)
*
*
@return
具體的產品對象
*
*/
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();
}
}結果:我是具體的產品A這里的幾個角色都很簡單,主要分為四大模塊,一是抽象工廠,其為工廠方法模式的核心;二是具體工廠,其實現(xiàn)了具體的業(yè)務邏輯;三是抽象產品,是工廠方法模式所創(chuàng)建的產品的父類;四是具體產品,為實現(xiàn)抽象產品的某個具體產品的對象。上述的代碼中我們在Client類中構造了一個工廠對象,并通過其生產了一個產品對象,這里我們得到的產品對象是ConcreteProductA的實例,如果想得到ConcreteProductB的實例,更改ConcreteFactory中的邏輯即可:public
class
ConcreteFactory
extends
Factory
{
/**
*
具體工廠類
*
*/
@Override
public
Product
createProduct()
{
//return
new
ConcreteProductA();
return
new
ConcreteProductB();
}
}這種方式比較常見,需要哪一個產品就生產哪一個,有時候也可以利用反射的方式更簡潔的來生產具體產品對象,此時,需要在工廠方法的參數(shù)列表中傳入一個Class類來決定是哪一個產品類:public
abstract
class
Factory
{
/**
*
抽象工廠方法
*
具體由子類實現(xiàn)
*
*
@param
clz
產品對象類類型
*
*
@return
具體的產品對象
*
*/
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),如果你不喜歡這種方式,也可以嘗試為每一個產品都定義一個具體的工廠,各司其職。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();
}
}像這樣擁有多個工廠的方式我們稱為多工廠方法模式,同樣的,回到我們最初的那個工廠方法模式,當我們的工廠只有一個的時候,我們還是為工廠提供了一個抽象類,那么,我們是否可以將其簡化掉呢?如果確定你的工廠類只有一個,那么簡化掉抽象類是肯定沒問題的,我們只需要將對應的工廠方法改為靜態(tài)方法即可:public
class
Factory
{
/**
*
具體工廠類
**/
@Override
public
static
Product
createProduct()
{
return
new
ConcreteProductA();
}
}像這樣的方式又稱為簡單工廠模式或靜態(tài)工廠模式,它是工廠方法模式的一個弱化版本。其實到這里大家應該可以發(fā)現(xiàn),工廠方法模式是完全符合設計原則的,其降低了對象之間的耦合度,而且,工廠方法模式依賴于抽象的架構,其將實例化的任務交由子類去完成,有非常好的擴展性。五、Android源碼中的工廠方法模式Activ
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 能源審計在制漿造紙行業(yè)節(jié)能改造中的應用考核試卷
- 租賃市場消費者行為研究考核試卷
- 清潔生產技術在化妝品企業(yè)品牌戰(zhàn)略中的應用考核試卷
- 光纖網絡運維管理體系建設考核試卷
- 部編道德與法治七年級上冊第一單元成長的節(jié)拍測試卷
- 2025年中國GRC素線數(shù)據(jù)監(jiān)測報告
- 2025年中國COD排放總量在線監(jiān)測儀數(shù)據(jù)監(jiān)測研究報告
- 2025年中國30對旋卡式電纜分線盒數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國鑄鋼鐵合頁市場分析及競爭策略研究報告
- 2025至2030年中國重力式貨架鋼木托盤市場分析及競爭策略研究報告
- 5E教學模式研究現(xiàn)狀與提升策略
- 2024年糧油倉儲管理員理論知識競賽理論考試題庫500題(含答案)
- T-FSS 81-2023 佛山標準 食品包裝用玻璃瓶罐
- 【國網-變電運維】刀閘控制回路及五防(統(tǒng)一格式版本)
- 政府投資項目發(fā)改委審批程序課件
- 根管治療期間疼痛的處理
- 客服兼職聘用合同范例
- 調味品供應合同范本
- 垃圾清運方案、安全作業(yè)制度、環(huán)保管理制度
- 【互聯(lián)網消費金融風險管控探究:以螞蟻花唄ABS為例(論文)11000字】
- 安全操作規(guī)程匯編(服裝廠)
評論
0/150
提交評論