• 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

    细节

  • 相关阅读:
    单例模式创建
    盛最多水的容器
    魔术索引
    钢条切割
    比较版本号
    矩阵中的路径
    机器人的运动范围
    计网基础问题
    Linux 下android环境的配置
    Fedora15下安装Android开发环境
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4888402.html
Copyright © 2020-2023  润新知