代码改变世界

代理

2015-12-13 13:17  AB小博客  阅读(179)  评论(0)    收藏  举报
//  main.m
#import <Foundation/Foundation.h>
#import "computerInterface.h"
#import "IBM.h"
#import "ComputerDalegate.h"
#import "Lenovo.h"
/*
 1.代理和被代理要实现同一个借口
 2.代理要引用被代理
 3.客户找代理
 
            公共接口
 
 被代理 <---------    代理
  IBM
                       |
                       |
                     客户
 
 */
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1.客户找代理
        IBM *ibm = [[IBM alloc]init];
        Lenovo *lenovo = [[Lenovo alloc]init];
        ComputerDalegate *dalegate = [[ComputerDalegate alloc]initWithVector:lenovo];
        [dalegate designComputer];
        [dalegate produceComputer];
        [dalegate saleComputer];
        
    }
    return 0;
}
//
//  computerInterface.h 公共接口

#import <Foundation/Foundation.h>

@protocol computerInterface <NSObject>
//1.设计电脑
-(void)designComputer;
//2.生产电脑
-(void)produceComputer;


@end

 

 
//
//  Lenovo.h

#import <Foundation/Foundation.h>
#import "computerInterface.h"
@interface Lenovo : NSObject<computerInterface>

@end
//
//  Lenovo.m

#import "Lenovo.h"

@implementation Lenovo
-(void)designComputer{
    NSLog(@"Lenovo设计电脑。。。");
}
-(void)produceComputer{
    NSLog(@"Lenovo生产电脑...");
}
@end
//
//  IBM.h
#import <Foundation/Foundation.h>
#import "computerInterface.h"
@interface IBM : NSObject<computerInterface>

@end
//
//  IBM.m
#import "IBM.h"
@implementation IBM
-(void)designComputer{
    NSLog(@"设计电脑。。。");
}
-(void)produceComputer{
    NSLog(@"生产电脑...");
}
@end

代理商

//
//  ComputerDalegate.h
#import <Foundation/Foundation.h>
#import "computerInterface.h"
@interface ComputerDalegate : NSObject<computerInterface>
{
    id<computerInterface> vector;
}
-(void)saleComputer;
-(instancetype)initWithVector:(id<computerInterface>)vector;
@end
//
//  ComputerDalegate.m
#import "ComputerDalegate.h"

@implementation ComputerDalegate
-(instancetype)initWithVector:(id<computerInterface>)v{
    if (self=[super init]) {
        self->vector = v;
    }
    return self;
}
-(void)saleComputer{
    NSLog(@"销售电脑");
}
-(void)designComputer{
    [self->vector designComputer];
    
}
-(void)produceComputer{
    [self->vector produceComputer];
}
@end