iOS设计模式简介
2015-08-04 本文已影响449人
952625a28d0d
-
编码是门艺术
-
设计模式的基本原则
-
设计模式的类型
-
设计模式一般应用于复杂的项目
-
为什么会抽象出设计模式?
设计模式是在众多人开发大型项目遇到问题,为了解决特定问题而抽象出来的解决方案。 -
设计模式可以解决什么问题?
适配器模式:解决Model与View连接关系,隔断,解耦 -
学习设计模式的必要性
封装、继承、多态 -
参考书籍:
Pro Design Patterns in Swift
Pro Objective-C Design Pattern for iOS -
设计模式的基本原则
- 开闭原则 对扩展开放、对修改关闭。小项目用不到
- Example: 基类
#import <UIKit/UIKit.h>
@interface BaseAnimationView : UIView
@property(nonatomic, strong) NSString * title;
/**
* 切换到正常状态
*
* @param animation 是否执行动画
* @param duration 动画持续时间
*/
- (void)changeToNormalStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;
/**
* 切换到静止状态
*
* @param animation 是否执行动画
* @param duration 动画持续时间
*/
- (void)changeToDisableStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;
@end```
import "BaseAnimationView.h"
@implementation BaseAnimationView
- (void)changeToNormalStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
}
- (void)changeToDisableStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
}```
我们想要对上面这个类进行修改,就要再写一个类继承自以上的类,创建新的方法
#import "BaseAnimationView.h"
@interface FadeAnimationView : BaseAnimationView
@property(nonatomic, strong) NSAttributedString * attributedString;
/**
* 切换到高亮状态
*
* @param animation 是否执行动画
* @param duration 动画持续时间
*/
- (void)changeToHighLightStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;
@end```
这样做就体现了开闭原则,代码只允许扩展,不允许修改,以免出现不必要的错误。
2. 里氏代换原则 子类、父类 子类可以用父类所有的方法 父类也可以使用子类的所有方法
import "ViewController.h"
import "BaseAnimationView.h"
import "FadeAnimationView.h"
import "ScaleAnimationView.h"
@interface ViewController ()
@end
@implementation ViewController
-
(void)viewDidLoad {
[super viewDidLoad];// 父类调用子类初始化,实现了里氏代换原则
BaseAnimationView *baseAnimationView = [[ScaleAnimationView alloc] init];
[baseAnimationView changeToNormalStateAnimation:YES duration:2.f];
}
@end```
- 依赖倒转原则 抽象不依赖于细节 细节依赖于抽象, 这个指的是私有方法不应该暴露在外界,尽量要做到抽象的方法用具体的实现来实现,而不暴露在外界。
#import "FadeAnimationView.h"
@implementation FadeAnimationView
// 私有方法
- (void)fadeAnimation: (BOOL)animation
{
}
- (void)changeToNormalStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
// 调用私有方法,但在.h文件中不暴露该方法
[self fadeAnimation:YES];
}
- (void)changeToDisableStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
}
- (void)changeToHighLightStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
}
@end```
4. 接口隔离原则 尽量保证接口必要性原则,不要让接口做一些八竿子打不着的事情
/**
- 切换到出错状态
- @param animation 是否执行动画
- @param duration 动画持续时间
*/
- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;```
- 合成/聚合复用
#import <UIKit/UIKit.h>
#import "FadeAnimationView.h"
@interface AnimationView : UIView
@property (nonatomic, strong) FadeAnimationView *fadeAnimationView;
/**
* 切换到出错状态
*
* @param animation 是否执行动画
* @param duration 动画持续时间
*/
- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;
@end```
import "AnimationView.h"
@implementation AnimationView
- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration{
// 实现想要修改的代码
}
@end```
- 设计模式的类型
- GOF设计模式
- 并发设计模式:处理线程执行顺序的一系列设计模式
- 框架级别的设计模式 MVC MVVM
![](https://img.haomeiwen.com/i189984/308d8a24b54e7b24.png)