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

    细节

  • 相关阅读:
    学习CSS定位(布局)
    XSLT
    CSS模型框学习笔记
    XMLDOM复习
    XMLDOM之浏览器差异
    HTMLDOM入门
    学习二级纵向菜单两步走
    Xpath很全的学习地点,不看后悔
    LinQ To XML
    收集的一些零散代码
  • 原文地址:https://www.cnblogs.com/ming1025/p/6656434.html
Copyright © 2011-2022 走看看