關於設計模式找到了乙個系列講的非常到位,也很容易讓人理解,這裡我也是看下面的部落格來理解抽象工廠模式。
理解抽象工廠應先了解產品族、產品等級的概念:
所謂產品族,是指位於不同產品等級結構中,功能相關聯的產品組成的家族。比如amd的主機板、晶元組、cpu組成乙個家族,intel的主機板、晶元組、cpu組成乙個家族。而這兩個家族都來自於三個產品等級:主機板、晶元組、cpu。乙個等級結構是由相同的結構的產品組成,示意圖如下:
uml類圖:
根據uml類圖,以實現蘋果和三星生產手機和電腦為例子來用**實現。
1.抽象產品
1、抽象手機
#import2、抽象電腦@protocol itelephone -(void
) getproductinfo;
@end
#import2.具體產品@protocol icomputer -(void
) getproductinfo;
@end
1、蘋果手機
#import#import
"itelephone.h
"
#import""2、蘋果電腦@implementation
-(void
) getproductinfo
@end
#import#import
"icomputer.h
"
#import""3、三星手機@implementation
-(void
) getproductinfo
@end
#import#import
"itelephone.h
"@inte***ce samsungtelephone : nsobject@end
#import4、三星電腦"samsungtelephone.h
"@implementation
samsungtelephone
-(void
) getproductinfo
@end
#import#import
"icomputer.h
"@inte***ce samsungcomputer : nsobject@end
#import3.抽象工廠"samsungcomputer.h
"@implementation
samsungcomputer
-(void
) getproductinfo
@end
#import4.具體工廠(產品族)#import
"itelephone.h
"#import
"icomputer.h
"@protocol electronicfactory -(id
) producttelephone;
-(id
) productcomputer;
@end
1、蘋果工廠
#import#import
"electronicfactory.h
"
#import""2、三星工廠#import""
#import""
@implementation
-(id
) producttelephone
-(id
) productcomputer
@end
#import#import
"electronicfactory.h
"@inte***ce samsungfactory : nsobject@end
#import呼叫 :"samsungfactory.h
"#import
"samsungtelephone.h
"#import
"samsungcomputer.h
"@implementation
samsungfactory
-(id
) producttelephone
-(id
) productcomputer
@end
通過**我們能分析出如果增加產品等級那樣抽象工廠、具體工廠都要改,這樣會很麻煩,如果增加產品族那就很容易。這也是我們使用抽象工廠的優缺點之一。
抽象工廠模式 設計模式3之抽象工廠模式
工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...
設計模式之抽象工廠模式
目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...
設計模式之抽象工廠模式
定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...