简单的deletage(代理)模式

delegate是iOS编程中的一种设计模式,它适用与让一个对象去检测自定义控件的各种状态。

我们可以用这个设计模式来让单继承的objective-c类表现出它父类之外类的特征.

代码如下:
一个类CustomView继承于NSObject,它加载在MainViewController上。这段代码的主要用途就是几种触摸事件

首先,先定义CustomView,在其头文件中定义代理CustomViewDelegate

同时声明3个方法

@protocol CustomViewDelegate <NSObject>

@optional   
//可选择性

//开始有关的状态:customView开始被触摸

-(void)customViewBeganTouch:(CustomView
*)customView;

// customView 被move

-(void)customViewMoveTouch:(CustomView
*)customView;

//customView 触摸结束

-(void)customViewEndedTouch:(CustomView
*)customView;

@end

@interface CustomView : UIView

@property (nonatomic, assign) id<CustomViewDelegate> delegate;

@end

然后在CustomView.m中通知delegate执行的某个协议方法

-(void)touchesBegan:(NSSet *)touches
withEvent:(UIEvent *)event

{

//通知delegate执行的某个协议方法

if ([_delegate
respondsToSelector:@selector(customViewBeganTouch:)])
{

[_delegatecustomViewBeganTouch:self];

}

}

-(void)touchesMoved:(NSSet *)touches
withEvent:(UIEvent
*)event

{

if ([_delegaterespondsToSelector:@selector(customViewMoveTouch:)]) {

[_delegatecustomViewMoveTouch:self];

}

}

-(void)touchesEnded:(NSSet *)touches
withEvent:(UIEvent
*)event

{

if ([_delegaterespondsToSelector:@selector(customViewEndedTouch:)]) {

[_delegatecustomViewEndedTouch:self];

}

}

在这个时候,CustomView的事情做完了,可以简单的理解为封装完了,接下来就该处理MainViewController中的问题了

MainViewController只要在定义CustomView的时候指定其代理为自身,就可以执行了

这时候先要在MainViewController.h中导入CustomView的头文件

#import <UIKit/UIKit.h>

#import "CustomView.h"

@interface MainViewController :
UIViewController<CustomViewDelegate>

@end

剩下的事情就在MainViewController.m中处理了

要先创建customView的对象,设置delegate

- (void)viewDidLoad

{

[superviewDidLoad];

//创建customView的对象,设置delegate

CustomView *customView = [[CustomView
alloc]initWithFrame:CGRectMake(50,
50, 50, 50)];

customView.backgroundColor =
[UIColorredColor];

[self.view
addSubview:customView];

[customView release];

customView.delegate = self; 
  // 设置代理(delegate)

}

最后实现功能

-(void)customViewBeganTouch:(CustomView
*)customView

{

self.view.backgroundColor =
[UIColorcolorWithRed:arc4random()%256/255.0green:arc4random()%256/255.0blue:arc4random()%256/255.0alpha:1.0];

}

-(void)customViewEndedTouch:(CustomView *)customView

{

customView.center = CGPointMake(arc4random()%321,
arc4random()%481);

}

以上就是简单的代理模式了。

简单的deletage(代理)模式,布布扣,bubuko.com

时间: 2025-01-02 01:28:25

简单的deletage(代理)模式的相关文章

设计模式07_代理模式

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/51550035 1.定义 代理模式为另一个对象提供替身或占位符以控制对这个对象的访问.使用代理模式创建代表对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象.创建开销大的对象或需要安全控制的对象.(摘自Head First 中文版第460页) 2.说明 代理模式中,代理类(proxy class)对它的客户隐藏了对象的具体信息.因此,在使用代理模

结构型模式:代理模式

文章首发: 结构型模式:代理模式 七大结构型模式之七:代理模式. 简介 姓名 :代理模式 英文名 :Proxy Pattern 价值观 :为生活加点料 个人介绍 : Provide a surrogate or placeholder for another object to control access to it. 为其他对象提供一种代理以控制对这个对象的访问. (来自<设计模式之禅>) 你要的故事 咱们从事 IT 行业,随时都可能上网查东西,如果网络速度慢或者网络访问受限制,那是相当的

JAVA笔记7__接口应用/Object类/简单工厂模式/静态代理模式/适配器模式

/** * 接口应用 */ public class Main { public static void main(String[] args) { Person p = new Person("fish7"); p.setIsay(new BeforeGong()); p.say(); p.setIsay(new AfterGong()); p.say(); } } class Person{ //只有在运行期才和say行为关联起来,这就叫面向接口编程 private String

代理模式以及多线程的简单使用

什么是代理? Delegation is a simple and powerful pattern in which one object in a program acts on behalf of, or in coordination with, another object. The delegating object keeps a reference to the other object-the delegate-and at the appropriate time sends

用最简单的例子说明设计模式(三)之责任链、建造者、适配器、代理模式、享元模式

责任链模式 一个请求有多个对象来处理,这些对象是一条链,但具体由哪个对象来处理,根据条件判断来确定,如果不能处理会传递给该链中的下一个对象,直到有对象处理它为止 使用场景 1)有多个对象可以处理同一个请求,具体哪个对象处理该请求待运行时刻再确定 2)在不明确指定接收者的情况下,向多个对象中的一个提交一个请求 3)可动态指定一组对象处理请求,客户端可以动态创建职责链来处理请求 public class Chain { public abstract class Handler { private

设计模式---(简单工厂模式,工厂模式,抽象工程模式),单例模式,代理模式,装饰器

简单工厂模式    简单工厂模式并不属于GoF的23种设计模式.     那么为什么我要用工厂模式呢?请看下面的一段程序.  #include  <iostream> using  namespace  std; class  Fruit  { public:     Fruit(string  name)  {         this-­‐>name  =  name;         if  (name  ==  "apple")  {      

简单的协议应用-代理模式

协议(protocol): <> 遵守某个协议,只要遵守了这个协议,相当于拥有协议里面的所有方法声明 声明一系列方法 编译器不强求实现协议里所有的方法 分类和协议都只能声明方法,不能声明成员变量 NSObject是基协议 假设一个人要买票,但是他没有空,需要一个代理去帮他问问票价多少啊,还有几张票啊~ 协议TicketDelegate.h,这里指代理所需要拥有的方法. // // TicketDelegate.h // 协议的应用-代理模式 // // Created by Mekor on

深刻理解代理模式在java中如何优化系统性能

最近参与实习公司的项目迭代,项目中需要实现系统的快速响应和大量数据处理.在不断的学习中获得一点儿心得,先记录下来.慢慢的修改! 关于代理模式的知识和简单应用之前的学习笔记中已经有记录了,可以复习一下.这里主要记录如何使用代理模式来实现延迟加载,进而提升系统系能和反应速度. 使用代理模式实现延迟加载的一个简单实例: 需求:项目中对系统的启动速度做了一定的要求 我们在系统首次加载时,因为不需要实际的数据来构造显示界面,这就为我们实现系统首次加载的快速响应提供了可能.在常规模式下,我们一般会在系统启动

动态代理模式

动态代理模式简介: 动态代理能够自动监听代理对象的方法,并且能够自动生成代理类的代码,这样就不需要我们自己去重写代理对象里的方法了,这样解决了代理类代码因业务庞大而庞大的问题,因为动态代理模式会在代码运行时根据代码来在内存中动态生成一个代理类自动重写代理对象[学Java,到凯哥学堂kaige123.com]的方法,然后这个动态代理类再调用处理类里的代码,处理类再调用到实际方法上去.而且我们可以选择性的监听代理对象的方法,有些不需监听的方法就可以在处理类中过滤掉.所以动态代理的优势就在于可以自动的