1. 引言
为什么会抽象出设计模式?
设计模式是在众多人开发大型项目遇到问题,为了解决特定问题而抽象出来的解决方案。设计模式可以解决什么问题?
适配器模式:解决Model与View连接关系,隔断,解耦学习设计模式的必要性
封装、继承、多态设计模式的基本原则
开闭原则 对扩展开放、对修改关闭。小项目用不到
2. 通过基类的例子来展示设计模式的魅力
2.1 开闭原则
#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.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
2.3 依赖倒转原则
抽象不依赖于细节 细节依赖于抽象, 这个指的是私有方法不应该暴露在外界,尽量要做到抽象的方法用具体的实现来实现,而不暴露在外界。
#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
2.4 接口隔离原则
尽量保证接口必要性原则,不要让接口做一些八竿子打不着的事情
/**
* 切换到出错状态
*
* @param animation 是否执行动画
* @param duration 动画持续时间
*/
- (void)changeToErrorStateAnimation:(BOOL)animation duration:(NSTimeInterval)duration;
2.5 合成/聚合复用
#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
3. 设计模式的类型
-
GOF设计模式
- 创建型模式:通常和对象的创建有关,涉及到对象实例化的方法。(共5种)
- 结构型模式:描述的是如何组合类和对象以获得更大的结构。(共7种)
- 行为型模式:用来对类或对象怎样交互和怎样分配职责进行描述。(共11种)
并发设计模式
处理线程执行顺序的一系列设计模式框架级别的设计模式
MVC MVVM
参考书籍:Objective-C编程之道 iOS设计模式解析
参考链接:http://www.runoob.com/design-pattern