最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解析iOS應用開發(fā)中對設計模式中的抽象工廠模式的實現(xiàn)

 更新時間:2016年03月30日 15:07:01   作者:晏博  
這篇文章主要介紹了解析iOS應用開發(fā)中對設計模式中的抽象工廠模式的實現(xiàn),示例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下

概述
抽象工廠模式是對象的創(chuàng)建模式,它是工廠方法模式的進一步推廣。

假設一個子系統(tǒng)需要一些產(chǎn)品對象,而這些產(chǎn)品又屬于一個以上的產(chǎn)品等級結(jié)構(gòu)。那么為了將消費這些產(chǎn)品對象的責任和創(chuàng)建這些產(chǎn)品對象的責任分割開來,可以引進抽象工廠模式。這樣的話,消費產(chǎn)品的一方不需要直接參與產(chǎn)品的創(chuàng)建工作,而只需要向一個公用的工廠接口請求所需要的產(chǎn)品。

通過使用抽象工廠模式,可以處理具有相同(或者相似)等級結(jié)構(gòu)中的多個產(chǎn)品族中的產(chǎn)品對象的創(chuàng)建問題。如下圖所示:

根據(jù)產(chǎn)品角色的結(jié)構(gòu)圖,就不難給出工廠角色的結(jié)構(gòu)設計圖。
可以看出,每一個工廠角色都有兩個工廠方法,分別負責創(chuàng)建分屬不同產(chǎn)品等級結(jié)構(gòu)的產(chǎn)品對象。

抽象工廠的功能是為一系列相關(guān)對象或相互依賴的對象創(chuàng)建一個接口。一定要注意,這個接口內(nèi)的方法不是任意堆砌的,而是一系列相關(guān)或相互依賴的方法。比如上面例子中的主板和CPU,都是為了組裝一臺電腦的相關(guān)對象。不同的裝機方案,代表一種具體的電腦系列。


由于抽象工廠定義的一系列對象通常是相關(guān)或相互依賴的,這些產(chǎn)品對象就構(gòu)成了一個產(chǎn)品族,也就是抽象工廠定義了一個產(chǎn)品族。

這就帶來非常大的靈活性,切換產(chǎn)品族的時候,只要提供不同的抽象工廠實現(xiàn)就可以了,也就是說現(xiàn)在是以一個產(chǎn)品族作為一個整體被切換。

核心
先上一張圖:

2016330150542261.png (432×188)

我們還是以苦逼的程序猿為例來說抽象工廠模式的一些核心概念。通過上圖你可以發(fā)現(xiàn),橫縱二維坐標可以確定平面上一個唯一的點,這也就是抽象工廠的核心。

產(chǎn)品等級結(jié)構(gòu):就是繼承結(jié)構(gòu)。就像上面Android,IOS,PHP這些技能繼承自一個抽象的技能類(譬如前面的ICode),這個抽象類與這些子類構(gòu)成了產(chǎn)品等級結(jié)構(gòu)。 同理的Android書,C語言書,腳本書繼承自一個工具書類,這個工具書抽象類與這些子類構(gòu)成了等級結(jié)構(gòu)。

產(chǎn)品族:抽象工廠模式中的產(chǎn)品族官方定義是指由同一個工廠生產(chǎn)的,位于不同產(chǎn)品等級結(jié)構(gòu)中的一組產(chǎn)品。 譬如上面的Android位于技能等級結(jié)構(gòu)中,Android書位于工具書等級結(jié)構(gòu)中,Android技能和Android書是位于不同產(chǎn)品結(jié)構(gòu)的一組產(chǎn)品,但是任何一個程序猿都需要具備技能和工具書, 譬如一個Android程序猿需要有Android技能及Android書,所以這個Android程序猿就是一個產(chǎn)品族。

概念: 提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,它是一種對象創(chuàng)建型模式。

重點: 抽象工廠模式結(jié)構(gòu)重要核心模塊:

抽象工廠:

聲明一組用于創(chuàng)建一族產(chǎn)品的方法,每一個方法對應一種產(chǎn)品。

具體工廠:

實現(xiàn)了在抽象工廠中聲明的創(chuàng)建產(chǎn)品的方法,生成一組具體產(chǎn)品,這些產(chǎn)品構(gòu)成了一個產(chǎn)品族,每一個產(chǎn)品都位于某個產(chǎn)品等級結(jié)構(gòu)中。

抽象產(chǎn)品:

它為每種產(chǎn)品聲明接口,在抽象產(chǎn)品中聲明了產(chǎn)品所具有的業(yè)務方法。

具體產(chǎn)品:

定義具體工廠生產(chǎn)的具體產(chǎn)品對象,實現(xiàn)抽象產(chǎn)品接口中聲明的業(yè)務方法。

使用場景:

當需要創(chuàng)建的對象是一系列相互關(guān)聯(lián)或相互依賴的產(chǎn)品族時,便可以使用抽象工廠模式。 大白話意思就是一個繼承體系中,如果存在著多個等級結(jié)構(gòu)(即存在著多個抽象類,像上面的技能與工具書), 并且分屬各個等級結(jié)構(gòu)中的實現(xiàn)類之間存在著一定的關(guān)聯(lián)或者約束,就可以使用抽象工廠模式。當然了, 同樣的道理就是如果各個等級結(jié)構(gòu)中的實現(xiàn)類之間不存在關(guān)聯(lián)或約束,則使用多個獨立的工廠來對產(chǎn)品進行創(chuàng)建。

程序?qū)嵗?br /> 如下實例就是上圖何如上文字解釋的實現(xiàn)代碼,具體不再解釋:

復制代碼 代碼如下:

package yanbober.github.io;
/*技能等級結(jié)構(gòu)部分*/
interface ICode {
    void coding();
}

class CodeImplAndroid implements ICode {
    @Override
    public void coding() {
        System.out.println("Coding Android!");
    }
}

class CodeImplPHP implements ICode {
    @Override
    public void coding() {
        System.out.println("Coding PHP!");
    }
}
/*工具書等級結(jié)構(gòu)*/
interface INeedBook {
    void lookBook();
}

class NeedBookImplAndroid implements INeedBook {
    @Override
    public void lookBook() {
        System.out.println("Look Android Book!");
    }
}

class NeedBookImplPHP implements INeedBook {
    @Override
    public void lookBook() {
        System.out.println("Look PHP Book!");
    }
}
/*產(chǎn)品族*/
interface IAbstractFactory {
    ICode getCodingSkill();
    INeedBook getNeedBook();
}

class FactoryImplAndroid implements IAbstractFactory {
    @Override
    public ICode getCodingSkill() {
        return new CodeImplAndroid();
    }

    @Override
    public INeedBook getNeedBook() {
        return new NeedBookImplAndroid();
    }
}

class FactoryImplPHP implements IAbstractFactory {
    @Override
    public ICode getCodingSkill() {
        return new CodeImplPHP();
    }

    @Override
    public INeedBook getNeedBook() {
        return new NeedBookImplPHP();
    }
}

public class Main {
    public static void main(String[] args) {
        IAbstractFactory factory = new FactoryImplAndroid();
        ICode code = factory.getCodingSkill();
        INeedBook book = factory.getNeedBook();
        code.coding();
        book.lookBook();

        factory = new FactoryImplPHP();
        code = factory.getCodingSkill();
        book = factory.getNeedBook();
        code.coding();
        book.lookBook();
    }
}


技巧Tips:依舊可以使用配置與反射實現(xiàn)自動適應。


總結(jié)一把
抽象工廠模式的優(yōu)點:

和前面一樣,隔離具體類的生成,使客戶并不需要知道什么被創(chuàng)建。
增加新的產(chǎn)品族很方便,無須修改已有系統(tǒng),符合“開閉原則”。
抽象工廠模式的缺點:

增加新的產(chǎn)品等級結(jié)構(gòu)麻煩,需要對原有系統(tǒng)進行較大的修改,甚至需要修改抽象層代碼,違背“開閉原則”。

相關(guān)文章

  • 代碼詳解iOS視頻直播彈幕功能

    代碼詳解iOS視頻直播彈幕功能

    本篇文章通過原理分析和代碼實例講述了實現(xiàn)iOS視頻直播彈幕功能的方法,需要的朋友參考學習下吧。
    2017-12-12
  • Flutter之可滾動組件實例詳解

    Flutter之可滾動組件實例詳解

    這篇文章主要為大家介紹了Flutter之可滾動組件實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • iOS開發(fā)中控制屏幕旋轉(zhuǎn)的編寫方法小結(jié)

    iOS開發(fā)中控制屏幕旋轉(zhuǎn)的編寫方法小結(jié)

    這篇文章主要介紹了iOS開發(fā)中控制屏幕旋轉(zhuǎn)的編寫方法小結(jié),包括橫豎屏切換時視圖所出現(xiàn)的問題等經(jīng)常需要注意的地方,需要的朋友可以參考下
    2015-10-10
  • 詳解iOS游戲開發(fā)中Cocos2D的坐標位置關(guān)系

    詳解iOS游戲開發(fā)中Cocos2D的坐標位置關(guān)系

    這篇文章主要介紹了iOS游戲開發(fā)中Cocos2D的坐標位置關(guān)系,Cocos2D是專門用來開發(fā)iOS游戲的開源框架,文中示例代碼采用Objective-C語言,需要的朋友可以參考下
    2016-02-02
  • IOS實現(xiàn)簡易版的QQ下拉列表

    IOS實現(xiàn)簡易版的QQ下拉列表

    在我們?nèi)粘i_發(fā)中tableView是用的非常多的控件, 無論在新聞應用, 視頻, 聊天應用中都廣泛使用, 那么今天小編也分享一個用tableView實現(xiàn)的類似QQ界面的下拉列表.效果很簡單,有需要的朋友們可以參考借鑒。
    2016-08-08
  • iOS手勢的實現(xiàn)方法

    iOS手勢的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了iOS手勢的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • iOS實現(xiàn)無限循環(huán)圖片輪播器的封裝

    iOS實現(xiàn)無限循環(huán)圖片輪播器的封裝

    這篇文章主要為大家詳細介紹了iOS實現(xiàn)無限循環(huán)圖片輪播器的封裝,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 在IOS系統(tǒng)上滾動條滾動到指定的位置出現(xiàn)空白頁面的解決方案

    在IOS系統(tǒng)上滾動條滾動到指定的位置出現(xiàn)空白頁面的解決方案

    這篇文章主要介紹了 在IOS系統(tǒng)上滾動條滾動到指定的位置出現(xiàn)空白頁面的解決方案,需要的朋友可以參考下
    2017-01-01
  • iOS9開放的新API--Spotlight使用指南

    iOS9開放的新API--Spotlight使用指南

    作為蘋果iOS9的重要特性之一,Spotlight搜索如今重新回到主界面最左側(cè)(同樣支持主界面下滑呼出),通過API的支持,還帶來了全新的Universal Search通用搜索功能,除了網(wǎng)絡以及系統(tǒng)本身內(nèi)容之外,還能直接搜索第三方應用內(nèi)的相關(guān)內(nèi)容。下面我們就來詳細研究下Spotlight
    2015-11-11
  • IOS實現(xiàn)簡單的進度條功能

    IOS實現(xiàn)簡單的進度條功能

    這篇文章主要介紹了IOS實現(xiàn)簡單的進度條功能的相關(guān)資料,需要的朋友可以參考下
    2016-01-01

最新評論

永吉县| 曲松县| 通辽市| 南投县| 海林市| 屏东县| 邹城市| 阿克苏市| 常宁市| 潮安县| 阜新市| 抚宁县| 宜兰县| 吴旗县| 新和县| 读书| 兰西县| 建湖县| 隆林| 花莲市| 百色市| 安顺市| 当阳市| 景德镇市| 嘉荫县| 永仁县| 灵丘县| 伊宁市| 东辽县| 盱眙县| 秭归县| 景洪市| 南城县| 永川市| 永善县| 密云县| 上思县| 六盘水市| 松江区| 密山市| 枣庄市|