欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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


由于抽象工廠定義的一系列對象通常是相關或相互依賴的,這些產品對象就構成了一個產品族,也就是抽象工廠定義了一個產品族。

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

核心
先上一張圖:

2016330150542261.png (432×188)

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

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

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

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

重點: 抽象工廠模式結構重要核心模塊:

抽象工廠:

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

具體工廠:

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

抽象產品:

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

具體產品:

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

使用場景:

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

程序實例
如下實例就是上圖何如上文字解釋的實現代碼,具體不再解釋:

復制代碼 代碼如下:

package yanbober.github.io;
/*技能等級結構部分*/
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!");
    }
}
/*工具書等級結構*/
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!");
    }
}
/*產品族*/
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:依舊可以使用配置與反射實現自動適應。


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

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

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

相關文章

  • IOS App圖標和啟動畫面尺寸詳細介紹

    IOS App圖標和啟動畫面尺寸詳細介紹

    這篇文章主要介紹了IOS App圖標和啟動畫面尺寸詳細介紹的相關資料,需要的朋友可以參考下
    2017-02-02
  • iOS圖片模糊效果的實現方法

    iOS圖片模糊效果的實現方法

    這篇文章主要為大家詳細介紹了iOS圖片模糊效果的三種實現方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • iOS開發(fā)中使用UIScrollView實現圖片輪播和點擊加載

    iOS開發(fā)中使用UIScrollView實現圖片輪播和點擊加載

    這篇文章主要介紹了iOS開發(fā)中使用UIScrollView實現圖片輪播和點擊加載的方法,代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2015-12-12
  • IOS中各種手勢操作實例代碼

    IOS中各種手勢操作實例代碼

    IOS中手勢操作一般是 UIGestureRecognizer 類的幾個手勢子類去實現,一般我們用到的手勢就這么5種,具體哪幾種大家通過本文學習吧,本文重點給大家介紹IOS中各種手勢操作實例代碼,一起看看吧
    2017-03-03
  • iOS模糊效果的實現方法

    iOS模糊效果的實現方法

    這篇文章主要為大家詳細介紹了iOS模糊效果的實現方法,利用系統(tǒng)的CoreImage濾鏡、UIImage ImageEffects分類和UIVisualEffectView實現模糊效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • 老生常談iOS應用程序生命周期

    老生常談iOS應用程序生命周期

    下面小編就為大家?guī)硪黄仙U刬OS應用程序生命周期。小編覺得挺不錯的,現在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-04-04
  • 詳解優(yōu)化iOS程序性能的25個方法

    詳解優(yōu)化iOS程序性能的25個方法

    本篇文章主要介紹了優(yōu)化iOS程序性能的25個方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • xcode 詳解創(chuàng)建靜態(tài)庫和動態(tài)庫的方法

    xcode 詳解創(chuàng)建靜態(tài)庫和動態(tài)庫的方法

    這篇文章主要介紹了xcode 詳解創(chuàng)建靜態(tài)庫和動態(tài)庫的方法的相關資料,這里對創(chuàng)建靜態(tài)庫和動態(tài)庫的方法詳細介紹,需要的朋友可以參考下
    2017-01-01
  • iOS 禁止按鈕在一定時間內連續(xù)點擊

    iOS 禁止按鈕在一定時間內連續(xù)點擊

    本文主要介紹了iOS中禁止按鈕在一定時間內連續(xù)點擊的方法,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • iOS?Lotusoot模塊化工具應用的動態(tài)思路

    iOS?Lotusoot模塊化工具應用的動態(tài)思路

    項目的不斷更迭,導致項目越來越大,越來越臃腫,為了讓項目更加條理,需要對項目進行模塊化處理,為了減少模塊之間的耦合,于是就有了Lotusoot這個工具
    2022-08-08

最新評論