iOS设计模式(九) 命令模式
2016-07-11 14:43
477 查看
可以把一系列动作封装成一个命令,在用户不需要知道其实现细节,使用细节的情况下就可以调用。
一般在想让应用程序支持撤销与恢复的情况下使用这一模式。
在OC中NSInvocation和NSUndoManager是这个模式的两个实现。
当进行操作时,控制器会添加一个该操作的逆操作的invocation到Undo栈中。当进行Undo操作时,Undo操作的逆操作会倍添加到Redo栈中,就这样利用Undo和Redo两个堆栈巧妙的实现撤销操作。
undoManager的两个栈里面保存的都是invocation对象.
每次执行method1的时候就注册一个undo方法到栈里面。
然后每次执行undo的时候就会调用run方法。
method1中两个注册undo方法的方式都可以运行。
一般在想让应用程序支持撤销与恢复的情况下使用这一模式。
在OC中NSInvocation和NSUndoManager是这个模式的两个实现。
NSInvocation
使用方法:NSMethodSignature *signature = [[self class] instanceMethodSignatureForSelector:@selector(run:)]; NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:signature]; [invocation setTarget:self]; [invocation setSelector:@selector(run:)]; NSString *str = @"haha"; int d; [invocation setArgument:&str atIndex:2]; [invocation invoke]; [invocation getReturnValue:&d]; NSLog(@"%d",d); - (int) run:(NSString *) str{ NSLog(@"run:%@",str); return 1; }
NSUndoManager
工作原理:当进行操作时,控制器会添加一个该操作的逆操作的invocation到Undo栈中。当进行Undo操作时,Undo操作的逆操作会倍添加到Redo栈中,就这样利用Undo和Redo两个堆栈巧妙的实现撤销操作。
undoManager的两个栈里面保存的都是invocation对象.
- (void) method1{ // [[self.undoManager prepareWithInvocationTarget:self] run]; [self.undoManager registerUndoWithTarget:self selector:@selector(run) object:nil]; } - (void) method2{ [self.undoManager undo]; }其中 run 是一个undo的方法。
每次执行method1的时候就注册一个undo方法到栈里面。
然后每次执行undo的时候就会调用run方法。
method1中两个注册undo方法的方式都可以运行。
相关文章推荐
- PropertyChangeListener简单理解
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- Ruby设计模式编程之适配器模式实战攻略
- 实例讲解Ruby使用设计模式中的装饰器模式的方法
- 设计模式中的模板方法模式在Ruby中的应用实例两则
- Ruby设计模式编程中对外观模式的应用实例分析
- 实例解析Ruby设计模式编程中Strategy策略模式的使用
- Ruby中使用设计模式中的简单工厂模式和工厂方法模式
- Ruby使用设计模式中的代理模式与装饰模式的代码实例
- 详解组合模式的结构及其在Ruby设计模式编程中的运用
- C# 设计模式系列教程-建造者模式
- C#编程中使用设计模式中的原型模式的实例讲解
- 使用设计模式中的工厂方法模式进行C#编程的示例讲解
- 实例解析C#设计模式编程中简单工厂模式的使用
- 详解C#设计模式编程中生成器模式的使用