委托模式从设计模式中的装饰模式,适配器模式,模板方法模式演变过来
现在来看看IOS版的是怎样的,先说说一个场景:
现在有一家公司,他们接到一个项目,项目的(Project),项目需要有一些懂Java的程序员来编写Java,意思就是委托一些Java程序员去完成这个项目(JavaProgrammerProtocol)
下面这段代码就像是一个Java工程师的委托书,谁继承了,表示谁有这个资格编写Java(调用writingJava方法)
//Java委托,如果这个委托有另外一个类可以写到另外一个类,如果没有可以跟随在一些类里面 @protocol JavaProgrammerProtocol @required -(void)writingJava; @end
下面这部分代表有一个项目,是要编写Java的人(继承JavaProtocol)的类,当某程序员承认为会JAVA的人,就必须告知自己将会为这个项目编写Java部分(必须在实例化后,设定javaProtocol的委托者)
//Project.h文件内容 #import <Foundation/Foundation.h> @interface Project : NSObject @property(nonatomic)id<JavaProgrammerProtocol> 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 <Foundation/Foundation.h> #import "Project.h" @interface Programmer : NSObject<JavaProgrammerProtocol> @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"字样。