|
抽象工廠模式(Abstact Factory)是一種常見的軟件設計模式。該模式為一個產品族提供了統一的創建接口。當需要這個產品族的某一系列的時候,可以為此系列的產品族創建一個 具體的工廠類。
【意圖】
抽象工廠模式提供一個創建一系統相關或相互依賴對象的接口,而無需指定它們具體的類【GOF95】
【抽象工廠模式結構圖】
【抽象工廠模式中主要角色】
抽象工廠(Abstract Factory)角色:它聲明一個創建抽象產品對象的接口。通常以接口或抽象類實現,所有的具體工廠類必須實現這個接口或繼承這個類。
具體工廠(Concrete Factory)角色:實現創建產品對象的操作??蛻舳酥苯诱{用這個角色創建產品的實例。這個角色包含有選擇合適的產品對象的邏輯。通常使用具體類實現。
抽象產品(Abstract Product)角色:聲明一類產品的接口。它是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。
具體產品(Concrete Product)角色:實現抽象產品角色所定義的接口,定義一個將被相應的具體工廠創建的產品對象。其內部包含了應用程序的業務邏輯。
【抽象工廠模式的優缺點】
抽象工廠模式的優點:
1、分離了具體的類
2、使增加或替換產品族變得容易
3、有利于產品的一致性
抽象工廠模式的缺點: 難以支持新種類的產品。這是因為AbstractFactory接口確定了可以被創建的產品集合。支持新各類的產品就需要擴展訪工廠接口,從而導致 AbstractFactory類及其所有子類的改變。
抽象工廠就是以一種傾斜的方式支持增加新的產品中,它為新產品族的增加提供了方便,而不能為新的產品等級結構的增加提供這樣的方便。
【抽象工廠模式適用場景】
以下情況應當使用抽象工廠模式:
1、一個系統不應當依賴于產品類實例如何被創建、組合和表達的細節,這對于所有形態的工廠模式都是重要的。
2、這個系統的產品有多于一個的產品族,而系統只消費其中某一族的產品。
3、 同屬于同一個產品族的產品是在一起使用的,這一約束必須在系統的設計中體現出來。
4、系統提供一個產品類的庫,所有的產品以同樣的接口出現,從而使用客戶端不依賴于實現
【Java與模式189頁】
Abstract Factory模式的幾個要點:
1、如果沒有應對“多系列對象構建”的需求變化,則沒有必要使用Abstract Factory模式。
2、“系列對象”指的是這項對象之間有相互依賴、或作用的關系。
3、Abstract Factory模式主要在于應對“新系列”的需求變動。缺點是難以應對
“新對象”的需求變動。這一點應該注意,就像前面說的,如果我們現在要在加入
其他系列的類,代碼的改動會很大。
4、Abstract Factory模式經常和Factory Method模式共同組合來應對
“對象創建”的需求變化。
抽象工廠中的增加
1. 在產品等級結構的數目不變的情況下,增加新的產品族,就意味著在每一個產品等級結構中增加一個(或者多個)新的具體 (或者抽象和具體)產品角色。 由于工廠等級結構是與產品等級結構平行的登記機構,因此,當產品等級結構有所調整時, 需要將工廠等級結構做相應的調整?,F在產品等級結構中出現了新的元素,因此, 需要向工廠等級結構中加入相應的新元素就可以了。 換言之,設計師只需要向系統中加入新的具體工廠類就可以了,沒有必要修改已 有的工廠角色或者產品角色。因此,在系統中的產品族增加時,抽象工廠模式是支持“開-閉”原則的。
2. 在產品族的數目不變的情況下,增加新的產品等級結構。換言之,所有的產品等級結構 中的產品數目不會改變,但是現在多出一個與現有的產品等級結構平行的新的產品等級結構。 要做到這一點,就需要修改所有的工廠角色,給每一個工廠類都增加一個新的工廠方法, 而這顯然是違背“開 主站蜘蛛池模板: 动漫美女无衣 | 伦理片92伦理午夜 | 日产国产欧美韩国在线 | 红尘影院在线观看 | 午夜福利电影网站鲁片大全 | 夜夜躁婷婷AV蜜桃视频 | 无码精品AV久久久奶水 | 午夜国产精品视频在线 | 虫族bl文全肉高h | 俄罗斯大肥BBXX| 国产呦精品一区二区三区下载 | 国产精品婷婷五月久久久久 | 久久精品热在线观看30 | 苍井空a 集在线观看网站 | 美女图片131亚洲午夜 | 中文在线观看免费网站 | 国产婷婷综合在线视频中文 | 91精品一区二区三区在线观看 | 无敌在线视频观看免费 | 日本欧美高清一区二区视频 | 国产精品久久久久AV麻豆 | 国产99久久久国产精品免费看 | 伊人久久大香线蕉综合高清 | 交换:年轻夫妇-HD中文字幕 | 老太婆风流特黄一级 | 偷拍 拍自 欧美色区 | 秋霞网在线伦理影片 | 成人国产在线不卡视频 | 日韩人妻无码精品-专区 | 黄片长版看嘛 | 欧美男男网站免费观看videos | 印度学生xxxxx性14一16 | 久久久久久久久人体 | 2021精品国产综合久久 | 蜜臀亚洲AV永久无码精品老司机 | G国产精品无马 | 色综合色综合久久综合频道 | 欧美人成在线观看ccc36 | 免费夜里18款禁用软粉色 | 欧美白妞大战非洲大炮 | 色一欲一性一乱一区二区三区 |