zoukankan      html  css  js  c++  java
  • 代理设计模式练习

    //  main.m
    //  代理设计模式练习
    
    
    #import <Foundation/Foundation.h>
    #import "Person.h"
    #import "LinkHome.h"
    #import "LoveHome.h"
    
    int main(int argc, const char * argv[]) {
    
        /*
         用代理实现学生找房子, 不具备找房子的能力
         所以学生可以找另一个对象来帮它找房子, 那么另一个对象就是学生的代理
         */
        Person *p = [Person new];
        
        LinkHome *lh = [LinkHome new];
        p.delegate = lh;
        
    //    LoveHome *lh = [LoveHome new];
    //    p.delegete = lh;
        
        
        [p findHourse];
        
        return 0;
    }
    //  Person.h
    //  day17
    
    
    #import <Foundation/Foundation.h>
    //#import "StudentProtocol.h"
    
    /*
     协议的编写规范:
     1.一般情况下, 当前协议属于谁, 我们就将协议定义到谁的头文件中
     2.协议的名称一般以它属于的那个类的类名开头, 后面跟上protocol或者delegate
     3.协议中的方法名称一般以协议的名称protocol之前的作为开头
     4.一般情况下协议中的方法会将触发该协议的对象传递出去
     
     5.一般情况下一个类中的代理属于的名称叫做 delegate
     
     6.当某一个类要成为另外一个类的代理的时候, 
       一般情况下在.h中用@protocol 协议名称;告诉当前类 这是一个协议.
        在.m中用#import真正的导入一个协议的声明
     */
    
    @class Person;
    
    @protocol PersonProtocol <NSObject>
    
    - (void)personFindHourse:(Person *)person;
    
    @end
    
    @interface Person : NSObject
    
    //@property (nonatomic, strong) id<StudentProtocol> delegete;
    @property (nonatomic, strong) id<PersonProtocol> delegate;
    
    - (void)findHourse;
    @end
    //  Person.m
    
    
    #import "Person.h"
    
    @implementation Person
    
    - (void)findHourse
    {
        NSLog(@"学生想找房子");
        // 通知代理帮他找房子
        if ([self.delegate respondsToSelector:@selector(personFindHourse:)]) {
            [self.delegate personFindHourse:self];
        }
    }
    
    @end
    //  StudentProtocol.h
    
    
    #import <Foundation/Foundation.h>
    
    @protocol StudentProtocol <NSObject>
    
    // 帮学生找房子
    - (void)studentFindHourse;
    @end
    //  LinkHome.h
    
    
    #import <Foundation/Foundation.h>
    //#import "Person.h"
    
    @protocol PersonProtocol;
    
    @interface LinkHome : NSObject <PersonProtocol>
    
    @end
    //  LinkHome.m
    
    
    #import "LinkHome.h"
    #import "Person.h"
    
    @implementation LinkHome
    
    - (void)personFindHourse:(Person *)person
    {
        NSLog(@"%s", __func__);
    }
    @end
    //  LoveHome.h
    
    #import <Foundation/Foundation.h>
    
    @interface LoveHome : NSObject
    
    @end
    //  LoveHome.m
    
    #import "LoveHome.h"
    
    @implementation LoveHome
    
    @end
  • 相关阅读:
    Papervision3D Essentials中文版,附Papervision3D_2.1.920.swc和章节练习源码
    谷歌Chrome浏览器上安装调试(debugger)版本的Flash Player
    Flash运行时错误代码解释说明
    XML
    Android手机与电脑互通
    mysql
    j2ee
    Linux
    C_obj
    maven
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6616125.html
Copyright © 2011-2022 走看看