设计模式IOS篇-第二章:委托模式

委托模式从设计模式中的装饰模式,适配器模式,模板方法模式演变过来

现在来看看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"字样。

原文地址:https://www.cnblogs.com/oscar1987121/p/5236356.html