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
  • 相关阅读:
    Gym102028L
    CF985G
    三元环 & 四元环计数 学习笔记
    Hall 定理 学习笔记
    CF36E
    CF1110G
    P6071
    可持久化数据结构 学习笔记
    多项式全家桶
    c++ 编译zlib
  • 原文地址:https://www.cnblogs.com/xufengyuan/p/6616125.html
Copyright © 2011-2022 走看看