美文网首页
iOS设计模式:代理

iOS设计模式:代理

作者: younger_times | 来源:发表于2017-03-03 13:13 被阅读27次

    视频教程-极客学院

    ps:感觉打的一手好广告啊,因为自己不太爱看视频,但这类又必须看才能明白。粘贴源代码是为了以后查阅方便,也注释了自己的理解。

    代理

    Customer

    #import <Foundation/Foundation.h>
    @class Customer;
    
    @protocol CustomerDelegate <NSObject>
    
    @required
    - (void)custmer:(Customer *)custmer buyItemCount:(NSInteger)count;
    
    @end
    
    @interface Customer : NSObject
    
    // 经销商
    @property (nonatomic, weak) id <CustomerDelegate> delegate;
    
    // 顾客买卖行为
    - (void)buyItemCount:(NSInteger)count;
    
    @end
    
    
    #import "Customer.h"
    
    @implementation Customer
    
    - (void)buyItemCount:(NSInteger)count {
    
        if (self.delegate && [self.delegate respondsToSelector:@selector(custmer:buyItemCount:)]) {
            
            [self.delegate custmer:self buyItemCount:count];
        }
    }
    
    @end
    

    使用

    #import "ViewController.h"
    #import "Customer.h"
    
    // 经销商
    @interface ViewController () <CustomerDelegate>
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        
        [super viewDidLoad];
        
        Customer *customer  = [[Customer alloc] init];
        customer.delegate   = self;
        
        [customer buyItemCount:5];
    }
    
    - (void)custmer:(Customer *)custmer buyItemCount:(NSInteger)count {
    
        NSLog(@"%ld", (long)count);
    }
    
    @end
    

    协议

    感觉协议和代理是有所不同,但不同...感觉说不出来

    TCPProtocol

    #import <Foundation/Foundation.h>
    
    @protocol TCPProtocol <NSObject>
    
    @required
    
    // 获取源端口号
    - (NSInteger)sourcePort;
    
    // 获取目的地端口号
    - (NSInteger)destinationPort;
    
    @end
    

    Model

    #import <Foundation/Foundation.h>
    #import "TCPProtocol.h"
    
    @interface Model : NSObject <TCPProtocol>
    
    @end
    
    
    #import "Model.h"
    
    @implementation Model
    
    // 获取源端口号
    - (NSInteger)sourcePort {
    
        return 10;
    }
    
    // 获取目的地端口号
    - (NSInteger)destinationPort {
    
        return 20;
    }
    
    @end
    

    使用

    #import "ViewController.h"
    #import "Customer.h"
    #import "TCPProtocol.h"
    
    // 经销商
    @interface ViewController () 
    
    @property (nonatomic) NSInteger  sourcePort;
    @property (nonatomic) NSInteger  destinationPort;
    
    @end
    
    @implementation ViewController
    
    - (void)viewDidLoad {
        [super viewDidLoad];
    }
    
    
    - (void)accessTCPData:(id <TCPProtocol>)data {
    
        self.sourcePort      = [data sourcePort];
        self.destinationPort = [data destinationPort];
    }
    
    

    相关文章

      网友评论

          本文标题:iOS设计模式:代理

          本文链接:https://www.haomeiwen.com/subject/duglgttx.html