码迷,mamicode.com
首页 > 移动开发 > 详细

iOS设计模式 - 命令

时间:2015-10-17 23:27:46      阅读:297      评论:0      收藏:0      [点我收藏+]

标签:

iOS设计模式 - 命令

技术分享

 

原理图

技术分享

 

说明

命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作。通过把请求封装成对象,客户端可以把它参数化并置入队列或日志中,也能够支持可撤销操作。命令对象将一个或多个动作绑定到特定的接收器。命令模式消除了作为对象的动作和执行它的接收器之间的绑定。

 

源码

https://github.com/YouXianMing/CommandPattern

//
//  Invoker.h
//  CommandPattern
//
//  Created by YouXianMing on 15/10/17.
//  Copyright © 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CommandProtocol.h"

@interface Invoker : NSObject

/**
 *  单例
 *
 *  @return 单例
 */
+ (instancetype)sharedInstance;

/**
 *  添加并执行
 *
 *  @param command 命令
 */
- (void)addAndExecute:(id <CommandProtocol>)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 <CommandProtocol>)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 <Foundation/Foundation.h>

@protocol CommandProtocol <NSObject>

@required
/**
 *  执行指令
 */
- (void)execute;

@end

 

细节

技术分享

 

iOS设计模式 - 命令

标签:

原文地址:http://www.cnblogs.com/YouXianMing/p/4888402.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!