iOS设计模式---命令模式(未完)

命令模式:将请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

Command: 为Invoker所知的通用接口(协议)

ConcreteCommand: 具体的命令对象,将Receiver(执行者)与action(实际操作)进行绑定

Receiver: 执行实际操作的对象

Invoker: 命令调用者,接收通用命令

Objective-C 示例:

Command:

//
//  NimoCommand.h
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import <Foundation/Foundation.h>

@protocol NimoCommand <NSObject>

- (void)execute;

@end

ConcreteCommand:

//
//  NimoConcreteCommand.h
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NimoCommand.h"
@class NimoReceiver;

@interface NimoConcreteCommand : NSObject <NimoCommand>

@property (nonatomic) NimoReceiver *receiver;

- (id)initWithReceiver:(NimoReceiver *)receiver;

@end
//
//  NimoConcreteCommand.m
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import "NimoConcreteCommand.h"
#import "NimoReceiver.h"

@implementation NimoConcreteCommand

- (void)execute
{
    [_receiver action];
}

- (id)initWithReceiver:(NimoReceiver *)receiver
{
    if (self = [super init]) {
        _receiver = receiver;
    }
    
    return self;
}

@end

Receiver:

//
//  NimoReceiver.h
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface NimoReceiver : NSObject

- (void)action;

@end
//
//  NimoReceiver.m
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import "NimoReceiver.h"

@implementation NimoReceiver

- (void)action
{
    NSLog(@"实际执行");
}

@end

Invoker:

//
//  NimoInvoker.h
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NimoCommand.h"

@interface NimoInvoker : NSObject

@property (nonatomic, weak) id<NimoCommand> command;

- (void)executeCommand;

@end
//
//  NimoInvoker.m
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import "NimoInvoker.h"

@implementation NimoInvoker

- (void)executeCommand
{
    [_command execute];
}

@end

Client:

//
//  main.m
//  CommandDemo
//
//  Created by Tony on 15/8/13.
//  Copyright (c) 2015年 NimoWorks. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "NimoReceiver.h"
#import "NimoInvoker.h"
#import "NimoConcreteCommand.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
       
        NimoReceiver *receiver = [[NimoReceiver alloc] init];
        NimoConcreteCommand *command = [[NimoConcreteCommand alloc] initWithReceiver:receiver];
        
        NimoInvoker *invoker = [[NimoInvoker alloc] init];
        invoker.command = command;
        [invoker executeCommand];
        
    }
    return 0;
}

Running:

2015-08-13 22:49:56.412 CommandDemo[1385:43303] 实际执行
时间: 2024-10-18 10:16:14

iOS设计模式---命令模式(未完)的相关文章

iOS设计模式 - 命令模式

命令模式 前言: 命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作.通过把请求封装成对象,客 户端可 以把它参数化并置入队列或日志中,也能够支持可撤销操作.命令对象将一个或多个动作绑定到特定的接收器.命令模式消除了作为对象的动作和执行它的接收器之 间的绑定. 正文内容大纲: 1.电视机.遥控器与接收器之间的关系2.改变一个视图的明暗程度(未使用命令模式)3.命令模式介绍4.改变一个视图的明暗程度(使用命令模式)5.附录 命令模式 1

设计模式 - 命令模式(command pattern) 多命令 详解

命令模式(command pattern) 多命令 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 具体步骤: 1. 多命令, 把未使用的命令, 初始化为空对象(NoCommand), 根据参数(slot), 选择输出命令. /** * @time 2014年6月16日 */ package command; /**

设计模式 - 命令模式(command pattern) 具体解释

命令模式(command pattern) 详细解释 本文地址: http://blog.csdn.net/caroline_wendy 命令模式(command pattern) : 将请求封装成对象, 以便使用不同的请求\队列\日志来參数化其它对象. 命令模式也能够支持撤销操作. 简单的命令模式的实现: 1. 详细的类, 每个类都有特定的方法: /** * @time 2014年6月9日 */ package command; /** * @author C.L.Wang * */ publ

设计模式 - 命令模式(command pattern) 详解

命令模式(command pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy 命令模式: 将请求封装成对象, 以便使用不同的请求\队列\日志来参数化其他对象. 命令模式也支持可撤销操作. 命令模式: 调用者(Invoker); 命令(Command): 可执行方法(execute), 具体命令(Concrete Command); 接受者(Receiver): 调用命令(Set Command); 具体方法: 1. 具体对象. /** *

设计模式 - 命令模式(command pattern) 撤销(undo) 详解

命令模式(command pattern) 撤销(undo) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考命令模式: http://blog.csdn.net/caroline_wendy/article/details/31379977 命令模式可以用于执行撤销(undo)操作. 具体方法: 1. 对象类中需要保存状态, 如level. package command; public class CeilingFan { String loca

设计模式 - 命令模式(command pattern) 宏命令(macro command) 详解

命令模式(command pattern) 宏命令(macro command) 详解 本文地址: http://blog.csdn.net/caroline_wendy 参考: 命名模式(撤销): http://blog.csdn.net/caroline_wendy/article/details/31419101 命令模式可以执行宏命令(macro command), 即多个命令的组合操作. 具体方法:  1. 其余代码与命令(撤销)一致 2. 添加宏命令(macro command),

小菜学设计模式——命令模式

背景 外面小摊与店面的比较,你就会发现,店面似乎更加容易管理,为什么呢?因为在客户与老板自己新增了很多员工,这些员工各司其职,所以井然有序,事情才会高效进行.这里有个重要的设计模式就是命令模式. 1.使用意图 在软件系统中,"行为请求者"与"行为实现者"通常呈现一种"紧耦合".但在某些场合,比如要对行为进行"记录.撤销/重做.事务"等处理,这种无法抵御变化的紧耦合是不合适的.在这种情况下,如何将"行为请求者"

设计模式--命令模式(Command)

基本概念: Command模式也叫命令模式 ,是行为设计模式的一种.Command模式通过被称为Command的类封装了对目标对象的调用行为以及调用参数,命令模式将方法调用给封装起来了. 命令模式的几个角色: Command: 抽象命令类 ConcreteCommand: 具体命令类 Invoker: 调用者 Receiver: 接收者 Client:客户类 命令模式的优缺点: 优点 1. 降低了系统耦合度 2. 新的命令可以很容易添加到系统中去. 缺点 使用命令模式可能会导致某些系统有过多的具

读书笔记之设计模式-命令模式

行为型:Command(命令模式) 命令模式: 目的:其实一般设计模式就是为了解耦.也没什么特别的,命令模式实际上就是将命令的请求者和命令的执行者解耦. 白话:领导说了,让把这个月的项目计划压缩到三个礼拜完成,还说了:"不管你用什么办法".这句“不管你用什么办法”就是我们所说的解耦.我不需要关心你怎么去做,我只要你能实现我想达到的目的. 模式结构:一般包含下面几个部分. Client:客户 Invoker:命令触发者 Command:命令 ConcreteCommand:具体命令实现