設計模式之工廠方法模式

2021-09-07 02:16:00 字數 2878 閱讀 5344

前面學習了簡單工廠 ,用了生產汽車的例子,上個例子是乙個工廠生產bmw、benz兩種車,如果以後還需要生產lambo、紅旗等,按照簡單工廠那就需要改工廠類的**,這樣擴充套件性不好,工廠方法能解決這個問題。

定義乙個建立產品物件的工廠介面,將實際建立工作推遲到子類當中。核心工廠類不再負責產品的建立,這樣核心類成為乙個抽象工廠角色,僅負責具體工廠子類必須實現的介面,這樣進一步抽象化的好處是使得工廠方法模式可以使系統在不修改具體工廠角色的情況下引進新的產品。

工廠方法模式是簡單工廠模式的衍生,解決了許多簡單工廠模式的問題。首先完全實現『開-閉 原則』,實現了可擴充套件。其次更複雜的層次結構,可以應用於產品結果複雜的場合。

工廠方法模式對簡單工廠模式進行了抽象。有乙個抽象的factory類(可以是抽象類和介面),這個類將不再負責具體的產品生產,而是只制定一些規範,具體的生產工作由其子類去完成。在這個模式中,工廠類和產品類往往可以依次對應。即乙個抽象工廠對應乙個抽象產品,乙個具體工廠對應乙個具體產品,這個具體的工廠就負責生產對應的產品。

工廠方法模式(factory method pattern)是最典型的

模板方法模式(template method pattern)應用。

uml圖:

抽象工廠(creator)角色:是工廠方法模式的核心,與應用程式無關。任何在模式中建立的物件的工廠類必須實現這個介面。

具體工廠(concrete creator)角色:這是實現抽象工廠介面的具體工廠類,包含與應用程式密切相關的邏輯,並且受到應用程式呼叫以建立產品物件。在上圖中有兩個這樣的角色:bulbcreator與tubecreator。

抽象產品(product)角色:工廠方法模式所建立的物件的超型別,也就是產品物件的共同父類或共同擁有的介面。在上圖中,這個角色是light。

具體產品(concrete product)角色:這個角色實現了抽象產品角色所定義的介面。某具體產品有專門的具體工廠建立,它們之間往往一一對應。

**實現:

1.抽象工廠

#import

#import

"ilight.h

"@protocol icreator -(id

) createlight;

@end

2.具體工廠

1、bulbcreator工廠生產bulblight

#import

#import

"icreator.h

"@inte***ce bulbcreator : nsobject@end

#import

"bulbcreator.h

"#import

"ilight.h

"#import

"bulblight.h

"@implementation

bulbcreator

-(id

) createlight

@end

2、tubecreator生產tubelight

#import

#import

"icreator.h

"@inte***ce tubecreator : nsobject@end

#import

"tubecreator.h

"#import

"tubelight.h

"@implementation

tubecreator

-(id

) createlight

@end

3.抽象產品

#import

@protocol ilight -(void

)turnon;

-(void

)turnoff;

@end

4.具體產品

1、bulblight

#import

#import

"ilight.h

"@inte***ce bulblight : nsobject@end

#import

"bulblight.h

"@implementation

bulblight

-(void

)turnon

-(void

)turnoff

@end

2、tubelight

#import

#import

"ilight.h

"@inte***ce tubelight : nsobject@end

#import

"tubelight.h

"@implementation

tubelight

-(void

)turnon

-(void

)turnoff

@end

5.呼叫

設計模式 工廠模式之工廠方法模式

工廠方法模式是指定義乙個建立物件的介面,然後實現這個介面的工廠來決定建立什麼樣的例項。工廠方法讓類的例項推遲到子類中進行。在這個模式中,只關心需要建立的是什麼工廠,不需要關心建立的細節。而且新加入的產品符合開閉原則。1 建立支付介面,裡面定義抽象的支付方法。package com.gupao.vip...

設計模式之工廠方法模式

package com.csair.design.pattern 工廠方法,有抽象基類,每個子類生產乙個具體物件,與抽象工廠的關係是,抽象工廠生產多個產品 產品有某種內在聯絡 工廠方法只生產乙個物件 author ppt public class factorymethod public stati...

設計模式之工廠方法模式

在介紹工廠方法模式之前,先來介紹一下簡單工廠。什麼是簡單工廠?在類中,難免要例項化一些類,那麼我們把這些類的例項化抽離出來封裝成乙個工廠類,工廠類提供乙個公共的靜態或非靜態的方法來返回其他物件所需要的物件。這樣做的目的就是將物件的例項化與邏輯 分開,提高 的復用能力。這就是簡單工廠。public a...