iOS 設計模式之抽象工廠 – iPhone手機開發技術文章 iPhone軟體開發教學課程

設計模式是程序提升的必備知識,這裡說下iOS如何實現抽象工廠設計模式。本文是看過oc編程之道這本的抽象工廠這章後寫出的,如果不明白原理可以看看那本書。

TestView.h首先創建一個視圖

//
//  TestView.h
//  AbstractFactory
//
//  Created by 杜甲 on 11/10/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import 

@interface TestView : UIView


@end

TestView.m

//
//  TestView.m
//  AbstractFactory
//
//  Created by 杜甲 on 11/10/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "TestView.h"

@implementation TestView

- (id)initWithFrame:(CGRect)frame
{
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = [UIColor redColor];
        
    }
    return self;
}

@end

接下來創建兩個類TestFactory、TestBrandingFactory 其中TestFactory繼承TestBrandingFactory。具體實現如下:

TestBrandingFactory.h

//
//  TestBrandingFactory.h
//  AbstractFactory
//
//  Created by 杜甲 on 11/10/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import 
#import 

@interface TestBrandingFactory : NSObject

+ (TestBrandingFactory *)factory;

- (UIView *)createTestView:(CGRect)frame;

@end

TestBrandingFactory.m

//
//  TestBrandingFactory.m
//  AbstractFactory
//
//  Created by 杜甲 on 11/10/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "TestBrandingFactory.h"
#import "TestFactory.h"

@implementation TestBrandingFactory

+ (TestBrandingFactory *) factory
{
    return [[TestFactory alloc] init];
}

- (UIView *) createTestView:(CGRect)frame
{
    return nil;
}



@end

TestFactory.h

//
//  TestFactory.h
//  AbstractFactory
//
//  Created by 杜甲 on 11/10/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "TestBrandingFactory.h"


@interface TestFactory : TestBrandingFactory

@end

TestFactory.m

//
//  TestFactory.m
//  AbstractFactory
//
//  Created by 杜甲 on 11/10/14.
//  Copyright (c) 2014 杜甲. All rights reserved.
//

#import "TestFactory.h"
#import "TestView.h"


@implementation TestFactory

- (UIView *)createTestView:(CGRect)frame
{
    return [[TestView alloc] initWithFrame:frame];
}


@end

最後貼出實現

 TestBrandingFactory * tmp = [TestBrandingFactory factory];
    UIView *v = [tmp createTestView:CGRectMake(50, 110, 100, 50)];
    [self.view addSubview:v];

發佈留言