【移動應(yīng)用開發(fā)技術(shù)】Android中工廠方法模式的作用是什么_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android中工廠方法模式的作用是什么_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android中工廠方法模式的作用是什么_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android中工廠方法模式的作用是什么_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android中工廠方法模式的作用是什么_第5頁
免費預(yù)覽已結(jié)束,剩余2頁可下載查看

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論