亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

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

2020-07-26 03:24:10
字體:
來源:轉載
供稿:網友

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

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

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

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

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


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

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

核心
先上一張圖:

2016330150542261.png (432×188)

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

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

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

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

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

抽象工廠:

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

具體工廠:

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

抽象產品:

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

具體產品:

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

使用場景:

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

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

復制代碼 代碼如下:

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:依舊可以使用配置與反射實現自動適應。


總結一把
抽象工廠模式的優點:

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

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品久久久久久久久不口人| 精品免费在线视频| 18久久久久久| 亚洲欧美精品伊人久久| 美女国内精品自产拍在线播放| 久久久久久久一区二区三区| 欧美日韩xxx| 精品国产鲁一鲁一区二区张丽| 精品爽片免费看久久| 中文字幕亚洲自拍| 亚洲精品一区二区三区婷婷月| 亚洲人成绝费网站色www| 91沈先生在线观看| 久久国产精品电影| 国产精品福利片| 91极品女神在线| 中文字幕欧美在线| 日韩中文字幕免费视频| 亚洲人成网站在线播| 91精品国产免费久久久久久| 国产成人免费av电影| 少妇高潮久久久久久潘金莲| 欧美成人三级视频网站| 久久夜色精品国产亚洲aⅴ| 亚洲xxxx18| 欧美日韩一二三四五区| 欧美日韩xxxxx| 人人做人人澡人人爽欧美| 精品国产区一区二区三区在线观看| 久久亚洲国产精品成人av秋霞| 中文亚洲视频在线| 日韩av色综合| 亚洲精品99久久久久中文字幕| 国产精品嫩草视频| 羞羞色国产精品| 97精品国产91久久久久久| 永久免费看mv网站入口亚洲| 成人av在线亚洲| 欧美精品一区在线播放| 亚洲第一福利在线观看| 欧美精品久久久久a| 九九久久久久久久久激情| 91美女高潮出水| 亚洲自拍小视频| 欧美日韩视频在线| 亚洲精品v天堂中文字幕| 九九热这里只有精品6| 成人国产精品久久久久久亚洲| 九九热最新视频//这里只有精品| 精品亚洲一区二区三区在线播放| 欧美高清一级大片| 亚洲国产欧美久久| 日日狠狠久久偷偷四色综合免费| 亚洲日本中文字幕免费在线不卡| 国产精品国产三级国产专播精品人| 国产精品欧美日韩| 欧美一级黄色网| 久久精品国产精品| 国产视频精品久久久| 日韩欧美aⅴ综合网站发布| 中日韩午夜理伦电影免费| 亚洲人成电影网站| 亚洲人成在线免费观看| 久久激情视频久久| 久久久久久久久久久国产| 亚洲成年人在线播放| 91精品久久久久久久久不口人| 国产精品欧美亚洲777777| 亚洲色图校园春色| 欧美性在线视频| 欧美午夜影院在线视频| 欧美性理论片在线观看片免费| 日韩激情第一页| 国产成人精品日本亚洲| 欧美性xxxxx极品娇小| 中文字幕免费国产精品| 91wwwcom在线观看| 91免费人成网站在线观看18| 欧美亚洲视频一区二区| 中文字幕亚洲一区二区三区| 国产精品一区专区欧美日韩| 国产热re99久久6国产精品| 国产精品自拍视频| 国产精品免费一区二区三区都可以| 中文字幕日韩欧美| 色午夜这里只有精品| 亚洲已满18点击进入在线看片| 亚洲一区二区中文字幕| 97免费在线视频| 精品美女永久免费视频| 国产欧美一区二区白浆黑人| 91精品国产精品| 一区三区二区视频| 欧美大胆在线视频| 国产一区二区三区高清在线观看| 亚洲欧美日韩在线一区| 亚洲人成自拍网站| 亚洲自拍偷拍在线| 欧美xxxwww| 色www亚洲国产张柏芝| 亚洲天堂日韩电影| 欧美成人免费一级人片100| 成人黄色片在线| 国产精品青草久久久久福利99| 8x海外华人永久免费日韩内陆视频| 日韩在线观看免费高清完整版| 国产美女精品视频免费观看| 国产精品美女久久久久av超清| 亚洲国产精品电影在线观看| 日av在线播放中文不卡| 久久视频免费观看| 欧美电影在线观看| 亚洲片在线观看| 久久九九免费视频| 日韩电影在线观看永久视频免费网站| 日韩电影大全免费观看2023年上| 一区二区三区 在线观看视| 国产91热爆ts人妖在线| 91在线视频成人| 精品欧美国产一区二区三区| 最近2019好看的中文字幕免费| 亚洲成人网久久久| 亚洲成人精品视频| 欧美日本高清一区| 国产精品日日做人人爱| 久久伊人91精品综合网站| 美女撒尿一区二区三区| 国产精品久久99久久| 亚洲精品乱码久久久久久金桔影视| 色综合天天狠天天透天天伊人| 在线观看不卡av| 51ⅴ精品国产91久久久久久| 亚洲成人999| 欧美激情在线观看视频| 欧美一级在线播放| 91国产精品视频在线| 国产亚洲视频中文字幕视频| 欧美激情一级二级| 国产成人精品视频在线| 亚洲色在线视频| 日韩精品视频在线观看网址| 亚洲国产天堂网精品网站| 欧美丝袜美女中出在线| 国产有码在线一区二区视频| 欧美激情综合色综合啪啪五月| 一本一本久久a久久精品综合小说| 国产精品青青在线观看爽香蕉| 成人美女免费网站视频| 91视频免费在线| 亚洲美女久久久| 国产精品男人爽免费视频1| 欧美日韩激情美女| 国产成人精品最新| 成人网址在线观看| 欧美激情精品在线| 伊人伊成久久人综合网小说| 日韩精品极品视频| 欧美美女15p| 韩国精品美女www爽爽爽视频| 中文字幕久久亚洲| 久久久噜噜噜久久久| 亚洲国产精彩中文乱码av在线播放| 欧美午夜片在线免费观看| 日日狠狠久久偷偷四色综合免费|