设计模式是程序提升的必备知识,这里说下iOS如何实现抽象工厂设计模式。本文是看过oc编程之道这本的抽象工厂这章后写出的,如果不明白原理可以看看那本书。
TestView.h首先创建一个视图
//
// TestView.h
// AbstractFactory
//
// Created by 杜甲 on 11/10/14.
// Copyright (c) 2014 杜甲. All rights reserved.
//
#import <UIKit/UIKit.h>
@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 <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@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];