设计模式的基本原则
开闭原则
扩展开放,修改关闭, 比如继承base类
#import "BaseAnimationView.h"
@interface FadeAnimationView : BaseAnimationView
@end
里氏代换原则
子类父类相互替换,使用相互的方法
- (void)viewDidLoad {
[super viewDidLoad];
BaseAnimationView *animationView = [[ScaleAnimationView alloc] init];
[animationView changeToDisableStateAnimated:YES duration:0.5f];
}
空实现:建立一个类,并不是直接使用,而是把他当做抽象的父类来使用,在.m中进行空实现
- (void)changeToDisableStateAnimated:(BOOL)animated duration:(NSTimeInterval)duration {
}
依赖倒转原则
抽象的方法可以暴露在.h文件,但具体的实现,即私有方法,不应该暴露
- (void)fadeAnimated:(BOOL)animated {
// todo
}
- (void)changeToNormalStateAnimated:(BOOL)animated duration:(NSTimeInterval)duration {
[self fadeAnimated:animated];
}
接口隔离原则
接口只做必要的事情,比如
- (void)changeToNormalStateAnimated:(BOOL)animated duration:(NSTimeInterval)duration;
如果是这样,添加了frame值,就没必要。frame值完全没必要暴露出来
- (void)changeToNormalStateAnimated:(BOOL)animated duration:(NSTimeInterval)duration frame:(CGRect)frame;
合成/聚合复用
如果BaseAnimation中的方法满足不了需求了,不需要继承它创建新类,而是用一个类作为容器将其聚合
@interface AnimationView : UIView
@property (nonatomic, strong) FadeAnimationView *fadeAnimationView;
- (void)changeToErrorStateAnimated:(BOOL)animated duration:(NSTimeInterval)duration;
设计模式的类型
两本书推荐阅读
- Pro Design Patterns in Swift (By Adam Freeman)
- Pro Objective-C Design Patterns for iOS (By Carlo Chung)