iOS 设计模式之抽象工厂
设计模式是程序提升的必备知识,这里说下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];
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。