代理模式

基本理解

  • 代理模式(Proxy),为其他对象提供一种代理以控制对这个对象的访问。

代理模式的应用

  • 远程代理:就是为一个对象在不同的地址空间提供据不代表。这样可以隐藏一个对象存在于不同地址空间的事实。
  • 虚拟代理:是根据需要创建开销很大的对象,通过它来存放实例化需要很长时间的真实对象。
  • 安全代理:用来控制真实对象访问时的权限。
    *智能指引:是指当调用真实的对象时,代理处理另外一些事。

例子

ChildViewCongroller.h

// // ChildViewController.h // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import <UIKit/UIKit.h> @protocol ChildDelegate <NSObject>-(void)changeColor:(UIColor *)color;@end @interface ChildViewController : UIViewController
{}@property(assign,nonatomic)id <ChildDelegate>ChildDelegate;@end

ChildVIewController.m

// // ChildViewController.m // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import "ChildViewController.h" @interface ChildViewController () @end @implementation ChildViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor whiteColor];UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(0, 100, 200, 50)];[button addTarget:self action:@selector(show) forControlEvents:UIControlEventTouchUpInside];
// button.backgroundColor = [UIColor redColor];[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];[button setTitle:@"返回调用代理" forState:UIControlStateNormal];[self.view addSubview:button];
}
-(void)show {[_ChildDelegate changeColor:[UIColor redColor]];[self.navigationController popToRootViewControllerAnimated:YES];
}
@end

在一个ViewController中去push出来ChildViewController。点击ChildViewController中的按钮改变根视图的背景色
ViewController.h

// // ViewController.h // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import <UIKit/UIKit.h> #import "ChildViewController.h" @interface ViewController : UIViewController<ChildDelegate>- (IBAction)showChild:(id)sender;
@end

ViewController.m

// // ViewController.m // DelegateDemo // // Created by zhanggui on 15/8/6. // Copyright (c) 2015年 zhanggui. All rights reserved. // #import "ViewController.h" @interface ViewController () @end @implementation ViewController- (void)viewDidLoad {[super viewDidLoad];}
#pragma mark - ChildViewDelegate Mehtod
-(void)changeColor:(UIColor *)color {self.view.backgroundColor =color;NSLog(@"change color.....");
}
- (IBAction)showChild:(id)sender {ChildViewController *child = [ChildViewController new];child.ChildDelegate = self;[self.navigationController pushViewController:child animated:YES];}
@end

这样通过代理就可以去实现。

附:

  • 源码地址:http://pan.baidu.com/s/1o6MNxZO

iOS设计模式之代理模式相关推荐

  1. 【设计模式】代理模式 ( 动态代理 | 模拟 Java 虚拟机生成对应的 代理对象 类 )

    文章目录 前言 一.模拟 JVM 生成对应的 代理对象 二.模拟 JVM 生成对应的 代理对象 完整流程展示 1.目标对象接口 2.被代理对象 3.调用处理程序 4.模拟 JVM 生成的代理对象类 5 ...

  2. C++设计模式之代理模式

    这篇文章主要介绍了C++设计模式之代理模式,本文讲解了什么是代理模式.代理模式的使用场合.代理模式的实现代码等内容,需要的朋友可以参考下 前言 青春总是那样,逝去了才开始回味:大学生活也是在不经意间就 ...

  3. python中代理模式分为几种_Python设计模式之代理模式实例详解

    本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...

  4. 设计模式笔记——代理模式

    设计模式笔记--代理模式 代理模式介绍 代理模式通常是介于请求方和提供方的一个中介系统,请求方是发送请求的一方,提供方是根据请求提供相应资源的一方 Web中的代理服务器就是一个例子,客户端向代理服务器 ...

  5. 「设计模式(五) - 代理模式」

    「设计模式(五) - 代理模式」 一.处处可见的"代理" "代理"在平常生活司空见惯,点外卖,租房子找中介,买飞机票等等.基本上用手机就能完成,也就是不直接接触 ...

  6. Javascript 设计模式之代理模式【讲师辅导】-曾亮-专题视频课程

    Javascript 设计模式之代理模式[讲师辅导]-969人已学习 课程介绍         随着 javascript ES6/7 的发布,很多老版本的设计模式的实现,今天来看是错误的,将被彻底. ...

  7. 设计模式之一代理模式

    代理模式(代理设计模式) 代理模式的定义与特点 代理模式的结构与实现 代理模式(代理设计模式) 在有些情况下,一个客户不能或者不想直接访问另一个对象,这时需要找一个中介帮忙完成某项任务,这个中介就是代 ...

  8. 23种设计模式7_代理模式之一静态代理

    23种设计模式7_代理模式之一静态代理 1 基本介绍 代理模式:为其他对象提供一种代理以控制对这个对象的访问 代理模式也叫委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模 ...

  9. Java中的设计模式:“代理模式”的理解

    代理模式定义: 为其他对象提供一种代理以控制对这个对象的访问.在面向对象中,有时候直接访问一些对象比较麻烦,所以代理模式就是在这个对象上加上一个访问该对象的访问层.类似于很多明星的事务实际都是交给经纪 ...

  10. 三国杀与设计模式之代理模式(Proxy)

    本人原博地址:http://blog.saymagic.cn/blog.php?id=17 三国杀案例:在五人局中,作为反贼的黄月英借黄忠的刀杀作为忠臣的夏侯惇,从这句话中我们可以总结出一个成语对不对 ...

最新文章

  1. HTC推出新款VR头显,奇怪的是只在日本销售
  2. Apache Log4j 学习笔记
  3. 【Python】用Python实现十大经典排序算法
  4. 去广告,原来可以如此简单——ADSafe 3.5.4.520 精简版
  5. ADO.NET提供的Connection类总结
  6. python中main方法的用法_python __main__和__init__正确用法
  7. Block 在不同情况下的变量存储区域
  8. 高通855比高通675贵多少钱,性能差距有多大?
  9. Failed to find provider null for user 0; expected to find a valid ContentProvider for this authority
  10. idea导入项目常见异常处理
  11. easyflash 教程
  12. ASCII码16进制对照表
  13. VIRTUALBOX无法加载USB移动设备的解决方法
  14. 樊登读书赋能读后感_樊登读书会读后感01012019
  15. 使用Perfmon和PAL工具查看Server性能--PerfMon入门指南
  16. 用python做动画的代码_Python应用 | 三行代码实现GIF动画
  17. 论文的黑斜体,白斜体是什么意思?
  18. Cadence OrCAD Capture 检索和定位功能的介绍图文视频教程
  19. 免费AI标注工具-音频查重工具
  20. 王道数据结构2.2.4——1、设计递归算法删除不带头结点的单链表L中所有值为x的结点

热门文章

  1. 【ubuntu操作系统入门】Ubuntu常用命令大全一
  2. 【算法学习】【图像增强】【Retinex】White Patch Retinex
  3. 牛客《机器学习》习题收集整理
  4. python数组(矩阵)乘法(点乘、叉乘)
  5. 【RS|概念】辐射校正和几何纠正
  6. SSM使用拦截器功能
  7. 630显卡驱动安装win7_Centos7 显卡驱动安装教程
  8. Docker与容器化-04-Docker私有仓库与镜像迁移备份
  9. C语言多线程基础-01-线程的创建与销毁
  10. 在现有计算机内安装另一个硬盘的原因,您有一台运行Windows7的计算机。您在计算机中安装第二个内部硬盘驱动器。您尝试创建一个系统映像,.. - 上学吧找答案...