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

    细节

  • 相关阅读:
    BZOJ.5068.友好的生物(思路)
    BZOJ.4695.最假女选手(线段树 Segment tree Beats!)
    BZOJ.4355.Play with sequence(线段树)
    BZOJ.4909.[SDOI2017]龙与地下城(正态分布 中心极限定理 FFT Simpson积分)
    HDU.4035.Maze(期望DP)
    Codeforces.1027F.Session in BSU(思路 并查集)
    BZOJ.4299.Codechef FRBSUM(主席树)
    UOJ.41.[清华集训2014]矩阵变换(稳定婚姻)
    BZOJ.5312.冒险(线段树)
    UOJ.386.[UNR #3]鸽子固定器(贪心 链表)
  • 原文地址:https://www.cnblogs.com/ming1025/p/6656434.html
Copyright © 2011-2022 走看看