设计模式
2019-06-26 本文已影响0人
Jimmy_L_Wang
六大设计原则
- 单一职责原则 - 一个类只负责一件事
- 依赖倒置原则 - 抽象不应该依赖于具体实现,具体实现可以依赖于抽象
- 开闭原则 - 对修改关闭,对扩展开放
- 里氏替换原则 - (父类可以被子类无缝替换,且原有功能不受任何影响)
- 接口隔离原则 (使用多个专门的协议、而不是一个庞大臃肿的协议,协议中的方法也要尽量少)
- 迪米特法则 - (一个对象应当对其他对象有尽可能少的了解,高内聚,低耦合)
责任链模式
什么是责任链模式?
某一个类,它有一个成员变量,其类型是这个类本身。
责任链.png//BusinessObject.h
#import <Foundation/Foundation.h>
@class BusinessObject;
typedef void(^CompletionBlock)(BOOL handled);
typedef void(^ResultBlock)(BusinessObject *handler, BOOL handled);
@interface BusinessObject : NSObject
// 下一个响应者(响应链构成的关键)
@property (nonatomic, strong) BusinessObject *nextBusiness;
// 响应者的处理方法
- (void)handle:(ResultBlock)result;
// 各个业务在该方法当中做实际业务处理
- (void)handleBusiness:(CompletionBlock)completion;
@end
// BusinessObject.m
@implementation BusinessObject
// 责任链入口方法
- (void)handle:(ResultBlock)result
{
CompletionBlock completion = ^(BOOL handled){
// 当前业务处理掉了,上抛结果
if (handled) {
result(self, handled);
}
else{
// 沿着责任链,指派给下一个业务处理
if (self.nextBusiness) {
[self.nextBusiness handle:result];
}
else{
// 没有业务处理, 上抛
result(nil, NO);
}
}
};
// 当前业务进行处理
[self handleBusiness:completion];
}
- (void)handleBusiness:(CompletionBlock)completion
{
/*
业务逻辑处理
如网络请求、本地照片查询等
*/
}
@end
桥接模式
bridge.png适配器模式
一个现有类需要适应变化的问题
- 对象适配器
- 类适配器
// Target.h
@interface Target : NSObject
- (void)operation;
@end
// Target.m
@implementation Target
- (void)operation
{
// 原有的具体业务逻辑
}
@end
// CoolTarget.h
// 适配对象
@interface CoolTarget : NSObject
// 被适配对象
@property (nonatomic, strong) Target *target;
// 对原有方法包装
- (void)request;
@end
// CoolTarget.m
@implementation CoolTarget
- (void)request
{
// 额外处理
[self.target operation];
// 额外处理
}
@end
单例模式
@implementation Mooc
+ (id)sharedInstance
{
// 静态局部变量
static Mooc *instance = nil;
// 通过dispatch_once方式 确保instance在多线程环境下只被创建一次
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
// 创建实例
instance = [[super allocWithZone:NULL] init];
});
return instance;
}
// 重写方法【必不可少】
+ (id)allocWithZone:(struct _NSZone *)zone{
return [self sharedInstance];
}
// 重写方法【必不可少】
- (id)copyWithZone:(nullable NSZone *)zone{
return self;
}
@end
命令模式
一种对行为进行参数化的设计模式,降低代码重合度;
总结
-
请手写单例实现
-
你都知道哪些设计原则,请谈谈你的理解
-
能否用一幅图简单的表示桥接模式的主题结构
-
UI事件传递机制是怎样实现的?你对其中运用到的设计模式是怎样理解的?
设计模式角度是是责任链模式,一个类,它有一个成员变量,其类型是当前类的类型。