• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Objective-C之代理设计模式小实例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

代理设计模式小实例

协议的应用场景之一:代理模式

需求:

用代理实现学生找房子, 不具备找房子的能力
所以学生可以找另一个对象来帮它找房子, 那么另一个对象就是学生的代理

UML类图:

类图关系分析:

+ 两个对象:Student(学生用户),LinkHouse(代理者)
+ LinkHouse是属于Student的代理,所以这里是(has a)拥有的组合关系
 + 所以:LinkHouse对象可以作为Student类里的一个对象数据类型的属性
 + 另外:因为不确定代理的具体类型,用id万能数据类型作为属性的声明类型
 + 在这里id数据类型后面需要<代理的名称>,例:id \<LinkHouse\>。
 - 协议写在数据类型的右边, 明确的标注如果想给该变量赋值, 那么该对象必须遵守某个协议

代码使用代理需要注意的地方

  • Student的需求方法中(这里是findHouse找房子的行为)调用代理者(LinkHouse)的所能提供的方法(比如findHouse,要是这个代理不能满足需求用户的需求,那留他有啥用)

  • 协议一般都是需求用户提出来的协议,比如我去相亲,对对方我心里肯定或多或少对对方有一些基本要求(比如会洗衣服做饭什么的),这些就是我提出来的协议。所以要遵循协议的编写规范(比如:一般情况下, 当前协议属于谁, 我们就将协议定义到谁的头文件中)

  • 协议的编写规范:

    • 1.一般情况下, 当前协议属于谁, 我们就将协议定义到谁的头文件中
    • 2.协议的名称一般以它属于的那个类的类名开头, 后面跟上protocol或者delegate
    • 3.协议中的方法名称一般以协议的名称protocol之前的作为开头
    • 4.一般情况下协议中的方法会将触发该协议的对象传递出去
    • 5.一般情况下一个类中的代理属于的名称叫做 delegate
    • 6.当某一个类要成为另外一个类的代理的时候, 一般情况下在.h中用@protocol 协议名称;告诉当前类 这是一个协议.在.m中用#import真正的导入一个协议的声明

接下来进入实例代码阶段:

Student.h代码:

 1 #import <Foundation/Foundation.h>
 2 #import "StudentFindHouse.h"  3 @class LinkHouse;
 4  5 @interface Student : NSObject
 6  7 @property (nonatomic,strong)id<StudentFindHouse> delegate;
 8  9 -(void)findHouse;
10 11 @end

Student.m代码:

 1 #import "Student.h"  2 #import "LinkHouse.h"  3  4 @implementation Student
 5  6 -(void)findHouse{
 7 if ([self.delegate respondsToSelector:@selector(findHouse)]) {
 8 [self.delegate findHouse];
 9  }
10 }
11 12 @end

然后写出Student的类的协议,StudentFindHouse.h:

1 #import <Foundation/Foundation.h>
2 3 @protocol StudentFindHouse <NSObject>
4 5 -(void)findHouse;
6 7 @end

LinkHouse.h代码:

1 #import <Foundation/Foundation.h>
2 3 #import "StudentFindHouse.h" 4 5 @interface LinkHouse : NSObject <StudentFindHouse>
6 7 -(void)findHouse;
8 9 @end

LinkHouse.m代码:

1 #import "LinkHouse.h" 2 3 @implementation LinkHouse 
4 5 -(void)findHouse{
6 NSLog(@"%s 帮student找房子。",__FUNCTION__);
7 }
8 9 @end

main.m代码以及然后运行的结果:



鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Objective-C编程-关于Block的要点发布时间:2022-07-12
下一篇:
iOS开发入门篇(一)Objective-C语言的简介发布时间:2022-07-12
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap