十二、簡單工廠模式

簡單工廠模式不屬于23種GOF設計模式之一。它也稱作靜態工廠方法模式,是工廠方法模式的特殊實現。

1. 何為簡單工廠模式

  • 定義:專門定義一個類來負責創建其他類的實例,被創建的實例常常具有共同的父類。

實際上就是由一個工廠類,根據傳入的參數,動態的決定創建出哪一個產品類的實例。

簡單工廠模式的結構圖如圖1-1所示:

圖1-1 簡單工廠模式

2. 代碼實現舉例

情景:在項目開發中,我們有時會遇到需要繪制各種統計圖形的需求,如線形圖、餅狀圖等等。這里,我們使用圖形工廠類來負責生成線形圖類、餅狀圖類的對象,結構圖如圖2-1所示:

圖2-1 繪圖情景結構圖

(1)IChart.h

@protocol IChart <NSObject>

- (void)drawing;

@end

(2)LineChart

@interface LineChart : NSObject<IChart>

@end


@implementation LineChart

- (void)drawing
{
    NSLog(@"LineChart drawing.");
}

@end

(3)PieChart

@interface PieChart : NSObject<IChart>

@end


@implementation PieChart

- (void)drawing
{
    NSLog(@"PieChart drawing.");
}

@end

(4)ChartFactory

@interface ChartFactory : NSObject

- (id<IChart>)getChart:(NSString *)type;

@end


@implementation ChartFactory

- (id<IChart>)getChart:(NSString *)type
{
    if ([type isEqualToString:@"line"])
    {
        return [[[LineChart alloc] init] autorelease];
    }
    else if([type isEqualToString:@"pie"])
    {
        return [[[PieChart alloc] init] autorelease];
    }
    else
    {
        return nil;
    }
}

@end

(5)客戶端調用代碼

ChartFactory *chartFactory = [[ChartFactory alloc] init];
// id<IChart> chart = [chartFactory getChart:@"line"];
id<IChart> chart = [chartFactory getChart:@"pie"];
[chart drawing];

通過以上的結構圖和代碼可知,簡單工廠模式主要有三種角色,分別是工廠角色、抽象產品角色和具體產品角色。

工廠類角色:簡單工廠模式的核心,負責根據傳入的參數來實例化具體的產品實例。
抽象產品角色:通常是工廠產生具體類的父類(或者是具體類實現的接口)。
具體產品角色:簡單工廠模式所創建的任何對象都是這個角色的實例。

3. 優缺點及使用場景

從上面的介紹可以看出,簡單工廠模式的優缺點如下:

優點是客戶端可以直接消費產品,而不必關心具體產品的實現,消除了客戶端直接創建產品對象的責 任,實現了對責任的分割。

缺點是工廠類集中了所有產品的創建邏輯,一旦不能正常工作,整個系統都會受到影響,而且當產品類別多結構復雜的時候,把所有創建工作放進一個工廠來,會使后期程序的擴展較為困難。

  • 通過優缺點的分析,我們可以在如下場景下使用簡單工廠模式:

工廠類負責創建的對象比較少時;
客戶端只知道傳入工廠類的參數,對于如何創建對象的邏輯不必關心時。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容