iOS设计模式-委托模式

委托是指给一个对象提供机会对另一对象中的变化做出反应或者相应另一个对象的行为。其基本思想是协同解决问题。

Delegate的使用场合

  • 对象A内部发生了一些事情,想通知对象B
  • 对象B想监听对象A内部发生了什么事情
  • 对象A想在自己的方法内部调用对象B的某个方法,并且对象A不能对对象B有耦合依赖
  • 对象A想传递数据给对象B

以上情况,结果都一样:对象B是对象A的代理(delegate)

在程序中使用

1.委托(A)需要做的工作有:

1.定义代理协议,协议名称的命名规范:控件类名 + Delegate

2.定义代理方法

  • 代理方法一般都定义为@optional
  • 代理方法名都以控件名开头
  • 代理方法至少有1个参数,将控件本身传递出去

3.设置代理(delegate)对象  (比如myView.delegate = xxxx;)

  • 代理对象遵守协议
  • 代理对象实现协议里面该实现的方法

4.在恰当的时刻调用代理对象(delegate)的代理方法,通知代理发生了什么事情

(在调用之前判断代理是否实现了该代理方法)

2.代理(B)需要做的工作有:

  • 遵循协议
  • 实现委托方法

实例:界面View底部点击"加载更多数据",通知控制器请求数据,并刷新表格。

委托A相关代码

定义代理协议、定义代理方法

#import <UIKit/UIKit.h>
@class TuangouFooterView;

// 定义一个协议,控件类名 + Delegate
@protocol TuangouFooterViewDelegate <NSObject>
// 代理方法一般都定义为@optional
@optional
// 代理方法名都以控件名开头,代理方法至少有1个参数,将控件本身传递出去
-(void)tuangouFooterDidClickedLoadBtn:(TuangouFooterView *)tuangouFooterView;

@end

@interface TuangouFooterView : UIView

// 定义代理。要使用weak,避免循环引用
@property(nonatomic,weak) id<TuangouFooterViewDelegate> delegate;
@end

在恰当的时刻调用代理对象(delegate)的代理方法,通知代理

 // 通知代理,先判断是否有实现代理的方法。
 if ([self.delegate respondsToSelector:@selector(tuangouFooterDidClickedLoadBtn:)]) {
     [self.delegate tuangouFooterDidClickedLoadBtn:self];
 }

代理(B)相关代码

实现代理

@interface ViewController ()<TuangouFooterViewDelegate>

设置代理

    TuangouFooterView *footerView=[TuangouFooterView footerView];
    footerView.delegate=self;// 设置当前footerView为代理

实现代理方法

/**
 *  加载更多的数据
 */
- (void)tuangouFooterDidClickedLoadBtn:(TuangouFooterView *)tuangouFooterView
{
#warning 正常开发:发送网络请求给远程的服务器
    // 1.添加更多的模型数据
    Tuangou *tg = [[Tuangou alloc] init];
    tg.icon = @"ad_01";
    tg.title = @"新增加的团购数据..";
    tg.price = @"100";
    tg.buyCount = @"0";
    [self.tgs addObject:tg];

    // 2.刷新表格(告诉tableView重新加载模型数据, 调用tableView的reloadData)
    [self.tableView reloadData];
}

时间: 2024-10-26 18:12:06

iOS设计模式-委托模式的相关文章

IOS常用设计模式——委托模式(IOS开发)

委托模式在之前的博客中用到了很多,比如各种复杂的Cocoa Touch框架的UI控件,几乎都用到了委托来响应控件事件或控制其他对象. 委托模式 -问题: 处理一切IOS应用都在UIApplication中完成,但是在设计过程中并不友好,它藕合度高,职责不清,难以维护,需要不断不断的重构,因此需要把看似功能很复杂的类分解或者分派成功能明确的类. Apple中我们经常用两种类,一个是框架类,各种用,不断的用,啥都能用:另一个就是协议类,就是协议. 协议的目的,终究是降低一个对象的复杂度和藕合度.框架

设计模式--委托模式C++实现

原文章地址:http://www.cnblogs.com/zplutor/archive/2011/09/17/2179756.html [委托模式 C++实现] 我对.Net的委托模型印象很深刻,使用委托,可以快速实现观察者模式,免去写很多繁杂重复的代码.遗憾的是,C++并没有提供这样的模型,为了达到相似的目的,需要继承一个类并重写virtual方法,这种做法需要写很多代码,效率比较低下(使用过MFC的应该都能体会到).然而,在强大的C++面前,没有什么是不可能的,已经有很多人针对这个问题进行

iOS设计模式——委托(delegate)

委托(delegate)也叫代理是iOS开发中常用的设计模式.我们借助于protocol(参考博文:objective-c协议(protocol))可以很方便的实现这种设计模式. 什么是代理? 苹果的官方文档给了很清晰的解释: Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object.

ios设计模式—策略模式

其实ios的设计模式有很多种,在实际应用中我们应该可以的去使用一些设计模式去规范和丰富我们的代码~~嘿嘿 其实策略模式就是将我们代码中的复杂逻辑抽象成一个对象去处理,这会大大减少代码量,并且去使我们的逻辑看起来更有条理. 拿if else为例可以将一个复杂的判断逻辑写到一个抽象的基类中,在其中进行判断再运用继承和多态的原理去分别执行不同的业务逻辑,这样会在控制器中减少代码量 控制器代码:通过传入判断条件去控制执行逻辑 // // ViewController.m // strategyDemo

实际案例讲解iOS设计模式——MVC模式

MVC模式是iOS编程中提到的最多次的设计模式,也是使用最频繁的设计模式之一.网络上有很多的MVC模式的分析文章,但都是从原理上来解释,很少能找到配套的案例来说明到底在实际的项目中要如何的使用这种模式.小编在经过详细的研究.对比和实验了之后,总结了一下这个模式的一些简单使用方法,希望能起一个抛砖引玉的作用,使得对MVC默认的同学能依葫芦画瓢的了解MVC模式的使用方法,并以此类推出更多.更好的方法出来. 这篇文章先从老生常谈的MVC设计模式的原理说起,然后配上一个简单的案例,以演示如何将一个常规的

iOS设计模式——生成器模式

选择建造自己的房子的人会把工程外包给承包商.单一承包商不能建造整个房子,他将其分解为几个部分,然后转包给几个实际的建筑商,他们懂得如何将零部件组装起来.房子由由风格.颜色和尺寸各不相同的部件组成.客户告诉承包商房子里都要有什么,然后承包商协调各房屋建筑商,决定需要做什么.应该如何建造,建筑商就如何施工.建房子是个复杂过程,单凭一双手就想建房子,即便可能也非常困难.如果承包商(指导者)与懂得如何建造的建筑商相互协调,这一过程简单得多且更易管理. 有时,构建某些对象有多种不同方式.如果这些逻辑包含在

iOS设计模式 - 命令模式

命令模式 前言: 命令对象封装了如何对目标执行指令的信息,因此客户端或调用者不必了解目标的任何细节,却仍可以对他执行任何已有的操作.通过把请求封装成对象,客 户端可 以把它参数化并置入队列或日志中,也能够支持可撤销操作.命令对象将一个或多个动作绑定到特定的接收器.命令模式消除了作为对象的动作和执行它的接收器之 间的绑定. 正文内容大纲: 1.电视机.遥控器与接收器之间的关系2.改变一个视图的明暗程度(未使用命令模式)3.命令模式介绍4.改变一个视图的明暗程度(使用命令模式)5.附录 命令模式 1

iOS设计模式-外观模式(也称门店模式)与装饰模式

何为外观模式? 外观模式为子系统中一组不同的接口提供统一的接口.外观定义了上层接口,通过降低复杂度和隐藏子系统间的通信以及依存关系,让子系统更加易于使用. 比方说子系统中有一组不同的类,其中一些彼此依赖.这让客户端难以使用子系统中的类,因为客户端需要知道每一个类.外观起到整个子系统的入口.有些客户端只需要子系统的某些基本行为,而对子系统的类不做太多定制,外观为这样的客户端提供简化的接口.只有需要从某些子系统的类定制更多行为的客户端,才会关注外观背后的细节. 外观模式:为系统中的一组接口提供一个统

iOS设计模式---访问者模式

一个简单的Car模型,含有1台Engine.4个Wheel,使用访问者模式添加对Car的升级与维修操作. 定义Engine类: // //  NimoEngine.h //  VisitorDemo // //  Created by fu zheng on 15/8/12. //  Copyright (c) 2015年 FuZheng. All rights reserved. // #import <Foundation/Foundation.h> #import "NimoC