日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android设计模式之——抽象工厂模式

發布時間:2023/12/13 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android设计模式之——抽象工厂模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、介紹

抽象工廠模式(Abstract Factory Pattern),也是創建型設計模式之一。前一節我們已經了解了工廠方法模式,那么這個抽象工廠又是怎么一回事呢?大家聯想一下現實生活中的工廠肯定都是具體的,也就是說每個工廠都會生產某一種具體的產品,那么抽象工廠意味著生產出來的產品是不確定的,那這豈不是很奇怪?抽象工廠模式起源于以前對不同操作系統的圖形化解決方案,如不同操作系統中的按鈕和文本框控件其實現不同,展示效果也不一樣,對于每一個操作系統,其本身就構成一個產品類,而按鈕與文本框控件也構成一個產品類,兩種產品類兩種變化,各自有自己的特性,如Android中的Button和TextView,iOS中的Button和TextView,Window Phone中的Button和TextView等。

二、定義

為創建一組相關或者是相互依賴的對象提供一個接口,而不需要指定它們的具體類。

三、使用場景

一個對象族有相同的約束時可以使用抽象工廠模式。是不是聽起來很抽象?舉個例子,Android、iOS、Window Phone下都有短信軟件和撥號軟件,兩者都屬于Software軟件的范疇,但是,它們所在的操作系統平臺不一樣,即便是同一家公司出品的軟件,其代碼的實現邏輯也是不一樣的,這時候就可以考慮使用抽象工廠方法模式來產生Android、iOS、Window Phone下的短信軟件和撥號軟件。

四、抽象工廠模式的UML類圖

UML類圖:

雖然抽象工廠方法模式的種類繁多,但是,主要還是分為4類:

  • AbstractFactory:抽象工廠角色,它聲明了一組用于創建一種產品的方法,每一個方法對應一種產品。

  • ConcreteFactory:具體的工廠角色,它實現了在抽象工廠中定義的創建產品的方法,生成一組具體產品,這些產品構成了一個產品種類,每一個產品都位于某個產品等級結構中。

  • AbstractProduct:抽象產品角色,它為每種產品聲明接口。

  • ConcreteProduct:具體產品角色,它定義具體工廠生產的具體產品對象,實現抽象產品接口中聲明的業務方法。

五、簡單實現

以車廠生產汽車零部件為例,A、B兩家車廠分別生產不同的輪胎、發動機、制動系統。雖然生產的零件不同,型號不同。但是根本上都有共同的約束,就是輪胎、發動機、制動系統。

輪胎相關類:

public interface ITire {/*** 輪胎 */void tire(); }public class NormalTire implements ITire{@Overridepublic void tire() {System.out.println("普通輪胎");} }public class SUVTire implements ITire{@Overridepublic void tire() {System.out.println("越野輪胎");} }

發動機相關類:

public interface IEngine {/***發動機 */void engine(); }public class DomesticEngine implements IEngine{@Overridepublic void engine() {System.out.println("國產發動機");} }public class ImportEngine implements IEngine{@Overridepublic void engine() {System.out.println("進口發動機");} }

制動系統相關類:

public interface IBrake {/***制動系統 */void brake(); }public class NormalBrake implements IBrake{@Overridepublic void brake() {System.out.println("普通制動");} }public class SeniorBrake implements IBrake{@Overridepublic void brake() {System.out.println("高級制動");} }

抽象車廠類:

public abstract class CarFactory {/*** 生產輪胎* * @return 輪胎* */public abstract ITire createTire();/*** 生產發動機* * @return 發動機* */public abstract IEngine createEngine();/*** 生產制動系統* * @return 制動系統* */public abstract IBrake createBrake();}

A車廠:

public class AFactory extends CarFactory{@Overridepublic ITire createTire() {return new NormalTire();}@Overridepublic IEngine createEngine() {return new DomesticEngine();}@Overridepublic IBrake createBrake() {return new NormalBrake();} }

B車廠:

public class BFactory extends CarFactory{@Overridepublic ITire createTire() {return new SUVTire();}@Overridepublic IEngine createEngine() {return new ImportEngine();}@Overridepublic IBrake createBrake() {return new SeniorBrake();} }

客戶類:

public class Client {public static void main(String[] args) {//A車廠CarFactory factoryA = new AFactory();factoryA.createTire().tire();factoryA.createEngine().engine();factoryA.createBrake().brake();System.out.println("---------------");//B車廠CarFactory factoryB = new BFactory();factoryB.createTire().tire();factoryB.createEngine().engine();factoryB.createBrake().brake();} }

結果:

普通輪胎 國產發動機 普通制動 ------------------ 越野輪胎 進口發動機 高級制動

可以看出上面模擬了兩個車廠,如果有了C廠、D廠,各自廠家生產的零部件型號種類又不相同,那么我們創建的類文件就會翻倍。這也是抽象工廠模式的一個弊端,所以實際開發中要權衡使用。

六、與工廠方法模式的區別

上一節有介紹了工廠方法模式,那么他們的區別是什么?抽象工廠模式是工廠方法模式的升級版本。對比如下:

七、源碼中的實現

抽象工廠模式在Android源碼中使用較少,因為很少會出現多個產品種類的情況,大部分使用工廠方法模式即可解決。

MediaPlayer

MediaPlayer Factory分別會生成4個不同的MediaPlayer基類:StagefrightPlayer、NuPlayerDriver、MidiFile和TestPlayerStub,四者均繼承于MediaPlayerBase。

八、總結

優點:

  • 分離接口與實現,客戶端使用抽象工廠來創建需要的對象,而客戶端根本就不知道具體的實現是誰,客戶端只是面向產品的接口編程而已,使其從具體的產品實現中解耦,同時基于接口與實現分離,使抽象該工廠方法模式在切換產品類時更加靈活、容易。

缺點:

  • 一是對類文件的爆炸性增加

  • 二是不太容易擴展新的產品類

總結

以上是生活随笔為你收集整理的Android设计模式之——抽象工厂模式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。