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

    iOS设计模式 - 命令

    原理图

    说明

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

    复制代码
    //
    //  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
    复制代码

    细节

  • 相关阅读:
    Unity设置相机正交相机和透视相机的动态切换
    获得两点之间连续坐标,向量加法、减法、乘法的运用
    替换材质
    常用的layer弹出层
    检测扇形角度
    c# 关闭socket的标准方法
    C#中Object和Json之间的转换
    Unity经验之谈-DoTween动画结束匿名委托之巨坑
    Unity透明视频播放 所需的Shader脚本
    阿里云云服务器Windows Server 2012 R2无法安装IIS等组件的解决办法
  • 原文地址:https://www.cnblogs.com/ming1025/p/6656434.html
Copyright © 2011-2022 走看看