Android常見設(shè)計(jì)模式六:工廠模式

對于開發(fā)人員來說,設(shè)計(jì)模式有時(shí)候就是一道坎,但是設(shè)計(jì)模式又非常有用,過了這道坎,它可以讓你水平提高一個(gè)檔次。而在android開發(fā)中,必要的了解一些設(shè)計(jì)模式又是必須的,因?yàn)樵O(shè)計(jì)模式在Android源碼中,可以說是無處不在。對于想系統(tǒng)的學(xué)習(xí)設(shè)計(jì)模式的同學(xué),這里推薦一本書,《大話設(shè)計(jì)模式》。


Android常用設(shè)計(jì)模式系列:

單例模式
模板模式
適配器模式
工廠模式
代理模式
原型模式
策略模式
Build模式
觀察者模式
裝飾者模式


模板方法模式

工廠模式是非常常見的設(shè)計(jì)模式之一,寫個(gè)筆記,記錄一下我的學(xué)習(xí)過程和心得。

首先了解一些工廠模式的定義。

定義一個(gè)用于創(chuàng)建對象的接口,讓子類決定實(shí)例化哪個(gè)類。

由定義可以知道,涉及的角色有:

  • Product(抽象產(chǎn)品類):要?jiǎng)?chuàng)建的復(fù)雜對象,定義對象的公共接口。
  • ConcreteProduct(具體產(chǎn)品類):實(shí)現(xiàn)Product接口。
  • Factory(抽象工廠類):該方法返回一個(gè)Product類型的對象。
  • ConcreteFactory(具體工廠類):返回ConcreteProduct實(shí)例。

工廠方法模式屬于創(chuàng)建型模式。
工廠方法模式主要用來創(chuàng)建復(fù)雜的對象,簡單對象能夠使用new來創(chuàng)建就不用工廠方法模式來創(chuàng)建了。

下面舉個(gè)例子,說一下實(shí)現(xiàn)

1 創(chuàng)建抽象產(chǎn)品類,定義公共接口:

    //抽象產(chǎn)品類
    public abstract class Product {
        public abstract void show();
    }

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");
        }
    }

3 創(chuàng)建抽象工廠類,定義公共接口:

//抽象工廠類
    public abstract class Factory {
        public abstract Product create();
    }
4 創(chuàng)建具體工廠類,繼承抽象工廠類,實(shí)現(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
        }
    }

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();
    }

廣泛應(yīng)用

總結(jié)

總結(jié)一下工廠模式的優(yōu)缺點(diǎn)

優(yōu)點(diǎn)

符合開放封閉原則,新增產(chǎn)品時(shí),只需增加相應(yīng)的具體產(chǎn)品類和相應(yīng)的工廠子類即可。
符合單一職責(zé)原則,每個(gè)具體工廠類只負(fù)責(zé)創(chuàng)建對應(yīng)的產(chǎn)品。

缺點(diǎn)

一個(gè)具體工廠只能創(chuàng)建一種具體產(chǎn)品。
增加新產(chǎn)品時(shí),還需增加相應(yīng)的工廠類,系統(tǒng)類的個(gè)數(shù)將成對增加,增加了系統(tǒng)的復(fù)雜度和性能開銷。
引入的抽象類也會(huì)導(dǎo)致類結(jié)構(gòu)的復(fù)雜化。

適用場景

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容