委托模式从设计模式中的装饰模式,适配器模式,模板方法模式演变过来
现在来看看IOS版的是怎样的,先说说一个场景:
现在有一家公司,他们接到一个项目,项目的(Project),项目需要有一些懂Java的程序员来编写Java,意思就是委托一些Java程序员去完成这个项目(JavaProgrammerProtocol)
下面这段代码就像是一个Java工程师的委托书,谁继承了,表示谁有这个资格编写Java(调用writingJava方法)
//Java委托,如果这个委托有另外一个类可以写到另外一个类,如果没有可以跟随在一些类里面@protocol JavaProgrammerProtocol@required-(void)writingJava;@end
下面这部分代表有一个项目,是要编写Java的人(继承JavaProtocol)的类,当某程序员承认为会JAVA的人,就必须告知自己将会为这个项目编写Java部分(必须在实例化后,设定javaProtocol的委托者)
//Project.h文件内容#import@interface Project : NSObject@property(nonatomic)id javaProtocol;-(void)projectStart;@end//Project.m文件内容#import "Project.h"@implementation Project-(void)projectStart{ if (self.javaProtocol != nil) { [self.javaProtocol writingJava]; }}@end
下面为编程者,一个懂Java编程的人(JavaProgrammerProtocol)
//Programmer.h文件内容#import#import "Project.h"@interface Programmer : NSObject @end//Programmer.m文件内容#import "Programmer.h"@implementation Programmer-(id)init{ self = [super init]; if(self){ //这里接到了项目后,设定自己(self)将会为这个项目编写Java(设定项目的委托者) Project *project = [[Project alloc]init]; project.javaProtocol = self; //当项目运行的时候(调用projectStart方法),方法会执行调用委托者的writingJava方法 [project projectStart]; } return self;}//由Project调用-(void)writingJava{ NSLog(@"Start to writing Java");}@end
最好,这个代码会调用writingJava方法,打印出"Start to writing Java"字样。