先啥都不说,看一下MUWork的使用例子,让我们通过代码来感性地认识一下这是个什么东西。
首先,你的程序里必须要有这些文件:
然后我们声明一个类:
#import <Foundation/Foundation.h> #import "MUActionProtocol.h" @interface TestAction : NSObject<MUActionProtocol> { } @property(nonatomic, strong) NSString* name; @end
实现它:#import "TestAction.h" @implementation TestAction @synthesize name = _name; - (id)execute { NSLog(@"name: %@", _name); return [NSString stringWithFormat:@"Action invoked:%@", _name]; } @end
再声明一个TestInteceptor类:
#import <Foundation/Foundation.h> #import "MUInterceptorProtocol.h" @interface TestInterceptor : NSObject<MUInterceptorProtocol> { } @end
实现它
#import "TestInterceptor.h" #import "MUHandler.h" @implementation TestInterceptor - (BOOL) actionBefore:(MUHandler*) handler { NSLog(@"actionBefore was invoked."); return YES; } - (void) actionAfter:(MUHandler*) handler { NSLog(@"actionAfter was invoked."); } @end
OK,我们来下一步。
在主程序里,我们可以这样写:
TestMUInterceptor* interceptor = [[TestMUInterceptor alloc] init]; TestAction* action = [[TestAction alloc] init]; DefaultMUResult* result = [[DefaultMuResult alloc] init]; MUHandler* handler = [[MUHandler alloc] init]; [handler setAction:action]; [handler setResult:result]; [handler addInterceptor:interceptor]; [handler setContextObject:@"abc" forKey:@"name"]; MUInvocation* invocation = [[MUInvocation alloc] init]; NSLog(@"%@", [invocation invoke:handler]);
我们运行一下程序,会输出什么呢?2012-07-29 11:01:49.740 TestMUWork[537:5d03] actionBefore was invoked. 2012-07-29 11:01:49.741 TestMUWork[537:5d03] name: abc 2012-07-29 11:01:49.742 TestMUWork[537:5d03] actionAfter was invoked. 2012-07-29 11:01:49.744 TestMUWork[537:5d03] Action invoked:abc
改一下这句: