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

 

細節

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM