iOS设计模式 - 抽象工厂
2015-08-02 07:14
645 查看
iOS设计模式 - 抽象工厂
原理图
说明
1. 抽象工厂指的是提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类
2. 如果多个类有相同的行为,但实际实现不同,则可能需要某种抽象类型作为其父类被继承,抽象类型定义了所有相关具体类将共有的共同行为
源码
https://github.com/YouXianMing/iOS-Design-Patterns
分析
关系原理图
原理图
说明
1. 抽象工厂指的是提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类
2. 如果多个类有相同的行为,但实际实现不同,则可能需要某种抽象类型作为其父类被继承,抽象类型定义了所有相关具体类将共有的共同行为
源码
https://github.com/YouXianMing/iOS-Design-Patterns
// // BrandingFactory.h // AbstractFactoryPattern // // Created by YouXianMing on 15/8/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import <Foundation/Foundation.h> #import <UIKit/UIKit.h> @interface BrandingFactory : NSObject /** * 抽象工厂方法 * * @return 具体的工厂 */ + (BrandingFactory *)factory; /** * 该工厂生产的brandedView(由具体工厂构造) * * @return 生产好的brandedView */ - (UIView *)brandedView; /** * 该工厂生产的brandedMainButton(由具体工厂构造) * * @return 生产好的brandedMainButton */ - (UIButton *)brandedMainButton; @end
// // BrandingFactory.m // AbstractFactoryPattern // // Created by YouXianMing on 15/8/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "BrandingFactory.h" #import "AcmeBrandingFactory.h" #import "SierraBrandingFactory.h" @implementation BrandingFactory + (BrandingFactory *)factory { if ([[self class] isSubclassOfClass:[AcmeBrandingFactory class]]) { return [AcmeBrandingFactory new]; } else if ([[self class] isSubclassOfClass:[SierraBrandingFactory class]]) { return [SierraBrandingFactory new]; } else { return nil; } } - (UIView *)brandedView { return nil; } - (UIButton *)brandedMainButton { return nil; } @end
// // AcmeBrandingFactory.h // AbstractFactoryPattern // // Created by YouXianMing on 15/8/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "BrandingFactory.h" @interface AcmeBrandingFactory : BrandingFactory @end
// // AcmeBrandingFactory.m // AbstractFactoryPattern // // Created by YouXianMing on 15/8/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "AcmeBrandingFactory.h" @implementation AcmeBrandingFactory - (UIView *)brandedView { NSLog(@"AcmeBrandedView"); return nil; } - (UIButton *)brandedMainButton { NSLog(@"AcmeBrandedMainButton"); return nil; } @end
// // SierraBrandingFactory.h // AbstractFactoryPattern // // Created by YouXianMing on 15/8/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "BrandingFactory.h" @interface SierraBrandingFactory : BrandingFactory @end
// // SierraBrandingFactory.m // AbstractFactoryPattern // // Created by YouXianMing on 15/8/2. // Copyright (c) 2015年 YouXianMing. All rights reserved. // #import "SierraBrandingFactory.h" @implementation SierraBrandingFactory - (UIView *)brandedView { NSLog(@"SierraBrandedView"); return nil; } - (UIButton *)brandedMainButton { NSLog(@"SierraBrandedMainButton"); return nil; } @end
分析
关系原理图
相关文章推荐
- iOS 学习资料整理
- iOS多线程——GCD篇
- Cocoapods Podfile配置
- iOS开发之沙盒机制(SandBox)
- iOS 代码自定义cell示例
- 招聘一个靠谱的 iOS(上)
- HDU_1017_AMathematicalCuriosity
- IOS_开发技巧_定位反地理编码的一些坑
- 做一个靠谱的iOS开发者(1)
- iOS开发_Tips(1)
- 关于iOS开发
- iOS开发-项目 知识分享与经验积累(一)
- IOS中Json解析的四种方法
- [精通iOS开发(第5版)]第21章 集合视图 笔记
- IOS开发之NSOperation
- iOS8开发--在Xcode6中设置Launch Image(启动图片)
- iOS8开发-- 如何在Xcode6中添加pch全局引用文件
- 一、IOS程序执行顺序、APPdelegate代理方法执行顺序、ViewController 生命周期
- IOS开发之多线程队列
- IOS autoLayout之使用VFL语言进行代码自动布局