A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 ★彬★卍囧神 于 2014-9-7 20:26 编辑

现在推出每日一题按照格式回答合格的加技术分或者金币。小伙伴们帮你们的回答打出来吧,让我们共同进步!!!


第三题:请说说代理模式,请你设计一个代理模式?

答:XXX(有代码的插入代码模式)。

注:答出你的理解就行,复制抄袭不算。

参与人多将持续这个互动

12 个回复

倒序浏览
还没学到代理的肿么破.. 我是一个人嘛?
回复 使用道具 举报
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
回复 使用道具 举报
学习一下~~~
回复 使用道具 举报
    我的理解是,  我不想干的事,找别人帮我干。
回复 使用道具 举报
我的理解就是设计一个接口,接口里面有好多功能,其他人通过调用接口里面的功能来实现自己想要的
回复 使用道具 举报
代理,个人觉得如同JAVA中的接口,因为需要成为代理,就要遵守某个协议,而协议是一组方法的声明,而至于代理的类型,则没有关系。
回复 使用道具 举报
T T 我也还没学到这个呢。。。。
回复 使用道具 举报
还没学到
回复 使用道具 举报
1  代理模式我这边比喻一下,是自己的事情,自己不做,让别人帮着做
2  但不是任何人都可以帮着做的,必须达到一定条件,这个条件就是做这些事情必须有的东西
    也就是遵守协议了
3 让谁帮着做不重要,重要的是,一定要遵守协议哟,少年  = =
回复 使用道具 举报
弱弱的问一下神马是代理。。。
回复 使用道具 举报
简单的例子。。。说说自己对代理模式的理解。1.buttonL.h  定义一个buttonL类,这个类只有一个方法,通知保镖我被打了
  1. #import <Foundation/Foundation.h>
  2. #import "baobiaoxieyi.h"
  3. @interface buttonL : NSObject
  4. //定义一个被打的地方
  5. @property (nonatomic,copy)NSString *place;
  6. //保镖遵守保镖协议
  7. @property (nonatomic,strong)id<baobiaoxieyi> baobiao;
  8. //被打了的方法
  9. -(void)hited;
  10. @end
复制代码
2.buttonL.m
  1. #import "buttonL.h"
复制代码
3baobiaoxieyi.h(协议)
  1. #import <Foundation/Foundation.h>
  2. @protocol baobiaoxieyi <NSObject>
  3. -(void)revenge:(NSString *)place;
  4. @end
复制代码
4baobiao.h
  1. #import <Foundation/Foundation.h>
  2. #import "baobiaoxieyi.h"
  3. @interface baobiao : NSObject<baobiaoxieyi>
  4. @end
复制代码
5.baobiao.m
  1. #import "baobiao.h"
  2. @implementation baobiao
  3. -(void)revenge:(NSString *)place{
  4.     NSLog(@"保镖赶到%@,打走了暴徒",place);
  5. }
  6. @end
复制代码
6mian函数
  1. #import <Foundation/Foundation.h>
  2. #import "buttonL.h"
  3. #import "baobiao.h"
  4. int main(int argc, const char * argv[])
  5. {    @autoreleasepool {
  6.         buttonL *btn=[[buttonL alloc] init];
  7.         baobiao *bao1=[[baobiao alloc] init];
  8.         btn.place=@"黑马训练营";
  9.         btn.baobiao=bao1;
  10.         [btn hited];    }
  11.     return 0;
  12. }
复制代码
7.输出结果
  1. 2014-09-27 14:16:50.693 简单的代理模式[1611:303] 我在黑马训练营被打了.
  2. 2014-09-27 14:16:50.695 简单的代理模式[1611:303] 保镖赶到黑马训练营,打走了暴徒
复制代码






回复 使用道具 举报 1 0
代理模式,简单说就是,A想做一件事,但是自己不能完成,于是设置代理人B来 替他完成这个事情。创建一个类A一个类B,A的对象拥有B这个属性,而B的对象想要成为A的代理人,那么就必须遵循一个协议,这个协议包含代理行为。
比如一个孩子想洗澡,但太小了自己不能洗,所以通过找一个代理人来给他洗澡,协议中有“洗澡”这个方法,保姆或者妈妈都需要遵循这个协议才能称为代理人。
代码如:

  1. #import <Foundation/Foundation.h>
  2. #import "ShowerProtocol.h"

  3. @interface Baby : NSObject

  4. @property (nonatomic, strong) id<ShowerProtocol> agent;

  5. - (void)shower;

  6. @end
复制代码
  1. #import "Baby.h"

  2. @implementation Baby

  3. -(void)shower
  4. {
  5.     [_agent helpshower];
  6. }

  7. @end
复制代码
  1. @protocol ShowerProtocol <NSObject>

  2. - (void)helpshower;

  3. @end
复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "ShowerProtocol.h"

  3. @interface Maid : NSObject<ShowerProtocol>

  4. @end

  5. #import "Maid.h"

  6. @implementation Maid

  7. - (void)helpshower
  8. {
  9.     NSLog(@"保姆帮孩子洗澡");
  10. }

  11. @end

复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "ShowerProtocol.h"

  3. @interface Mama : NSObject<ShowerProtocol>

  4. @end
  5. #import "Mama.h"

  6. @implementation Mama

  7. -(void)helpshower
  8. {
  9.     NSLog(@"妈妈帮孩子洗澡");
  10. }

  11. @end
复制代码
  1. #import <Foundation/Foundation.h>
  2. #import "Baby.h"
  3. #import "Maid.h"
  4. #import "Mama.h"

  5. int main()
  6. {
  7.     Baby *b = [[Baby alloc] init];
  8.    
  9.     //保姆作为代理人
  10.     Maid *m = [[Maid alloc] init];
  11.    
  12.     b.agent = m;
  13.    
  14.     [b shower];
  15.    
  16.     //妈妈作为代理人
  17.     Mama *mm = [[Mama alloc] init];
  18.    
  19.     b.agent = mm;
  20.    
  21.     [b shower];
  22.    
  23.     return 0;
  24. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马