前言
Android的設(shè)計模式系列文章介紹:歡迎關(guān)注,持續(xù)更新中:
Android的設(shè)計模式-設(shè)計模式的六大原則
一句話總結(jié)23種設(shè)計模式則
創(chuàng)建型模式:
Android的設(shè)計模式-單例模式
Android的設(shè)計模式-建造者模式
Android的設(shè)計模式-工廠方法模式
Android的設(shè)計模式-簡單工廠模式
Android的設(shè)計模式-抽象工廠模式
Android的設(shè)計模式-原型模式
行為型模式:
Android的設(shè)計模式-策略模式
Android的設(shè)計模式-狀態(tài)模式
Android的設(shè)計模式-責(zé)任鏈模式
Android的設(shè)計模式-觀察者模式
Android的設(shè)計模式-模板方法模式
Android的設(shè)計模式-迭代器模式
Android的設(shè)計模式-備忘錄模式
Android的設(shè)計模式-訪問者模式
Android的設(shè)計模式-中介者模式
Android的設(shè)計模式-解釋器模式
Android的設(shè)計模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計模式-代理模式
Android的設(shè)計模式-組合模式
Android的設(shè)計模式-適配器模式
Android的設(shè)計模式-裝飾者模式
Android的設(shè)計模式-享元模式
Android的設(shè)計模式-外觀模式
Android的設(shè)計模式-橋接模式
1.定義
定義一個用于創(chuàng)建對象的接口狈定,讓子類決定實例化哪個類颂龙。
2.介紹
- 工廠方法模式屬于創(chuàng)建型模式。
- 工廠方法模式主要用來創(chuàng)建復(fù)雜的對象纽什,簡單對象能夠使用new來創(chuàng)建就不用工廠方法模式來創(chuàng)建了措嵌。
3.UML類圖
角色說明:
- Product(抽象產(chǎn)品類):要創(chuàng)建的復(fù)雜對象,定義對象的公共接口芦缰。
- ConcreteProduct(具體產(chǎn)品類):實現(xiàn)Product接口企巢。
- Factory(抽象工廠類):該方法返回一個Product類型的對象。
- ConcreteFactory(具體工廠類):返回ConcreteProduct實例饺藤。
4.實現(xiàn)
4.1 創(chuàng)建抽象產(chǎn)品類包斑,定義公共接口:
//抽象產(chǎn)品類
public abstract class Product {
public abstract void show();
}
4.2 創(chuàng)建具體產(chǎn)品類流礁,繼承Product類:
//具體產(chǎn)品類A
public class ProductA extends Product {
@Override
public void show() {
System.out.println("product A");
}
}
//具體產(chǎn)品類B
public class ProductB extends Product {
@Override
public void show() {
System.out.println("product B");
}
}
4.3 創(chuàng)建抽象工廠類涕俗,定義公共接口:
//抽象工廠類
public abstract class Factory {
public abstract Product create();
}
4.4 創(chuàng)建具體工廠類,繼承抽象工廠類神帅,實現(xiàn)創(chuàng)建具體的產(chǎn)品:
//具體工廠類A
public class FactoryA extends Factory {
@Override
public Product create() {
return new ProductA();//創(chuàng)建ProductA
}
}
//具體工廠類B
public class FactoryB extends Factory {
@Override
public Product create() {
return new ProductB();//創(chuàng)建ProductB
}
}
4.5 測試方法:
public void test() {
//產(chǎn)品A
Factory factoryA = new FactoryA();
Product productA = factoryA.create();
productA.show();
//產(chǎn)品B
Factory factoryB = new FactoryB();
Product productB = factoryB.create();
productB.show();
}
5.應(yīng)用場景
- 生成復(fù)雜對象時再姑,無需知道具體類名,只需知道相應(yīng)的工廠方法即可找御。
6.優(yōu)點
- 符合開放封閉原則元镀。新增產(chǎn)品時,只需增加相應(yīng)的具體產(chǎn)品類和相應(yīng)的工廠子類即可霎桅。
- 符合單一職責(zé)原則栖疑。每個具體工廠類只負責(zé)創(chuàng)建對應(yīng)的產(chǎn)品。
7.缺點
- 一個具體工廠只能創(chuàng)建一種具體產(chǎn)品滔驶。
- 增加新產(chǎn)品時遇革,還需增加相應(yīng)的工廠類,系統(tǒng)類的個數(shù)將成對增加揭糕,增加了系統(tǒng)的復(fù)雜度和性能開銷萝快。
- 引入的抽象類也會導(dǎo)致類結(jié)構(gòu)的復(fù)雜化。
8.Android中的源碼分析
Android中的ThreadFactory就是使用了工廠方法模式來生成線程的著角,線程就是ThreadFactory的產(chǎn)品揪漩。
8.1 ThreadFactory相關(guān)源碼分析
//抽象產(chǎn)品:Runnable
public interface Runnable {
public abstract void run();
}
//具體產(chǎn)品:Thread
public class Thread implements Runnable {
//構(gòu)造方法
public Thread(Runnable target, String name) {
init(null, target, name, 0);
}
@Override
//實現(xiàn)抽象產(chǎn)品的抽象方法
public void run() {
if (target != null) {
target.run();
}
}
//其他代碼略
}
//抽象工廠:ThreadFactory
public interface ThreadFactory {
Thread newThread(Runnable r);
}
//具體工廠:AsyncTask中的實現(xiàn)
private static final ThreadFactory sThreadFactory = new ThreadFactory() {
private final AtomicInteger mCount = new AtomicInteger(1);
//實現(xiàn)抽象工廠的抽象方法
public Thread newThread(Runnable r) {
return new Thread(r, "AsyncTask #" + mCount.getAndIncrement());//返回Thread這個產(chǎn)品
}
};
8.2 總結(jié):
- 這里只要是介紹Android系統(tǒng)中工廠方法模式的應(yīng)用,線程和AsyncTask的原理就不說了吏口。
- 通過ThreadFactory奄容,我們可以創(chuàng)建出不同的Thread來冰更。
- 同樣,我們可以創(chuàng)建另外類似的工廠嫩海,生產(chǎn)某種專門的線程冬殃,非常容易擴展。
相關(guān)文章閱讀
Android的設(shè)計模式-設(shè)計模式的六大原則
一句話總結(jié)23種設(shè)計模式則
創(chuàng)建型模式:
Android的設(shè)計模式-單例模式
Android的設(shè)計模式-建造者模式
Android的設(shè)計模式-工廠方法模式
Android的設(shè)計模式-簡單工廠模式
Android的設(shè)計模式-抽象工廠模式
Android的設(shè)計模式-原型模式
行為型模式:
Android的設(shè)計模式-策略模式
Android的設(shè)計模式-狀態(tài)模式
Android的設(shè)計模式-責(zé)任鏈模式
Android的設(shè)計模式-觀察者模式
Android的設(shè)計模式-模板方法模式
Android的設(shè)計模式-迭代器模式
Android的設(shè)計模式-備忘錄模式
Android的設(shè)計模式-訪問者模式
Android的設(shè)計模式-中介者模式
Android的設(shè)計模式-解釋器模式
Android的設(shè)計模式-命令模式
結(jié)構(gòu)型模式:
Android的設(shè)計模式-代理模式
Android的設(shè)計模式-組合模式
Android的設(shè)計模式-適配器模式
Android的設(shè)計模式-裝飾者模式
Android的設(shè)計模式-享元模式
Android的設(shè)計模式-外觀模式
Android的設(shè)計模式-橋接模式