zoukankan      html  css  js  c++  java
  • OC-Protocol实现业务代理

    创建一个Protocol,相当于java的接口,但,有些方法不必实现,例如以下

    #import <Foundation/Foundation.h>
    
    @protocol MyProtocol
    
    @optional
    - (void) test1;
    
    - (void) test2;
    
    - (void) test3;
    @required
    - (void) test4;
    
    @end

    继承了该协议,并声明在@optional下的代码方法不是必须实现的,但@required下的方法必须实现。

    例如以下Book类

    #import <Foundation/Foundation.h>
    #import "MyProtocol.h"
    
    @interface Book : NSObject <MyProtocol>
    
    @property (nonatomic,assign) int price;
    
    @end

    #import "Book.h"
    
    @implementation Book
    
    - (void) test4
    {
    }
    
    - (void) dealloc
    {
        NSLog(@"Book is dealloc");
        [super dealloc];
    }
    
    @end

    创建一个模拟买票样例。仅仅要实现了该接口 就可以作为买票代理人

    #import <Foundation/Foundation.h>
    
    @protocol TicketAgentProtocol <NSObject>
    
    - (int) getTicketCount;
    
    - (int) getTicketPrice;
    
    
    @end

    #import <Foundation/Foundation.h>
    
    #import "TicketAgentProtocol.h"
    
    @interface Person : NSObject
    
    @property (nonatomic,retain) id<TicketAgentProtocol> delegate;
    
    - (NSString *) buyTicket;
    
    @end


    #import "Person.h"
    
    @implementation Person
    
    - (NSString *) buyTicket
    {
        return [NSString stringWithFormat:@"TICKET COUNT:%d ,TICKET PRICE:%d",
                [_delegate getTicketCount],[_delegate getTicketPrice]];
    }
    
    -(void)dealloc
    {
        [_delegate release];
        
        [super dealloc];
    }
    
    @end

    创建一个符合条件的“代理人”,就可以实现买票业务。

    #import <Foundation/Foundation.h>
    #import "TicketAgentProtocol.h"
    
    @interface Other : NSObject <TicketAgentProtocol>
    
    @end

    #import "Other.h"
    
    @implementation Other
    
    - (int) getTicketCount
    {
        return 1000;
    }
    
    - (int) getTicketPrice
    {
        return 100;
    }
    
    @end

    #import <Foundation/Foundation.h>
    #import "TicketAgentProtocol.h"
    #import "Person.h"
    #import "Other.h"
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            Person *p=[[[Person alloc] init] autorelease];
            Other *other=[[[Other alloc] init] autorelease];
            p.delegate=other;
            
            NSLog(@"%@",[p buyTicket]);
            
        }
        return 0;
    }


  • 相关阅读:
    PHP之ThinkPHP框架(界面)
    安卓网络访问(xUtils3)
    Python制作二维码和条形码扫描器 (pyzbar)
    redis 哨兵
    Django 源码阅读笔记(详细视图)
    Django 源码阅读笔记(基础视图)
    JavaScript基础
    Flask 基础
    redis 主从复制
    redis 数据删除策略和逐出算法
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/5091956.html
Copyright © 2011-2022 走看看