zoukankan      html  css  js  c++  java
  • iOS设计模式

    iOS设计模式 - 命令

    原理图

    说明

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

    源码

    https://github.com/YouXianMing/iOS-Design-Patterns

    //
    //  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

    细节

  • 相关阅读:
    @Transactional 什么情况下会失效?
    如何主持一场专业的面试?
    MIT-HIB 心率数据库及相关
    hadoop中Writable类
    XXX.jar has no source attachment
    Win10Eclipse配置个人本地hadoop
    js去除两个数组中重复的元素
    JS找出两个数组中不相同的元素
    flex中order控制元素的排列顺序
    flex中align-self设置侧轴的某元素的对其方式
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4888402.html
Copyright © 2011-2022 走看看