iOS设计模式 - 命令
原理图
说明
命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作。通过把请求封装成对象,客户端可以把它参数化并置入队列或日志中,也能够支持可撤销操作。命令对象将一个或多个动作绑定到特定的接收器。命令模式消除了作为对象的动作和执行它的接收器之间的绑定。
//// Invoker.h// CommandPattern//// Created by YouXianMing on 15/10/17.// Copyright © 2015年 YouXianMing. All rights reserved.//#import#import "CommandProtocol.h"@interface Invoker : NSObject/** * 单例 * * @return 单例 */+ (instancetype)sharedInstance;/** * 添加并执行 * * @param command 命令 */- (void)addAndExecute:(id )command;@end
//// Invoker.m// CommandPattern//// Created by YouXianMing on 15/10/17.// Copyright © 2015年 YouXianMing. All rights reserved.//#import "Invoker.h"@interface Invoker ()@property (nonatomic, strong) NSMutableArray *commandQueue;@end@implementation Invoker+ (instancetype)sharedInstance { static Invoker *sharedInstanceValue = nil; static dispatch_once_t oncePredicate; dispatch_once(&oncePredicate, ^{ sharedInstanceValue = [[Invoker alloc] init]; sharedInstanceValue.commandQueue = [NSMutableArray array]; }); return sharedInstanceValue;}- (void)addAndExecute:(id)command { // 添加并执行 [self.commandQueue addObject:command]; [command execute];}@end
//// CommandProtocol.h// CommandPattern//// Created by YouXianMing on 15/10/17.// Copyright © 2015年 YouXianMing. All rights reserved.//#import@protocol CommandProtocol @required/** * 执行指令 */- (void)execute;@end
细节