iOS 委托模式 理解例子

古代希腊有个哲学家,他毕生只做三件事:“吃饭”“睡觉”“工作”。为了更好的生活,提高工作的效率,他决定找个徒弟,把这些事委托给徒弟做。然而要成为他的徒弟,需要实现一个协议,协议要求能够处理睡觉,吃饭,工作这三件事,

这里面涉及到三个对象:

第一: 哲学家  对应一个通用类 Philospher

第二: 协议    对应一个PhilospherDelegate   规定了三种方法  sleep eat work

第三: 徒弟    对应一个委托对象 ViewController

委托协议 :PhilospherDelegate.h

@protocol PhilosopherDelegate

@required
-(void) sleep;
-(void) eat;
-(void) work;

@end

委托协议不需要.m文件 可以定义在 其他的 .h文件中

委托类 ViewController

#import <UIKit/UIKit.h>
#import "PhilosopherDelegate.h"

@interface ViewController : UIViewController<PhilosopherDelegate>

@end
#import "ViewController.h"
#import "Philosopher.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    Philosopher *obj = [[Philosopher alloc ] init];
    obj.delegate = self;
    [obj start];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma -- PhilosopherDelegate 方法实现
-(void) sleep
{
    NSLog(@"sleep...");
}

-(void) eat
{
     NSLog(@"eat...");
}

-(void) work
{
     NSLog(@"work...");
}

@end

哲学家 Philosopher

#import "PhilosopherDelegate.h"

@interface Philosopher : NSObject
{
    NSTimer *timer;
    int count;
}

@property  (nonatomic, weak) id<PhilosopherDelegate> delegate;

-(void) start;
-(void) handle;

@end
#import "Philosopher.h"

@implementation Philosopher

@synthesize delegate;

-(void) start
{
    count= 0;
    timer = [NSTimer scheduledTimerWithTimeInterval:3.0 target:self selector:@selector(handle)userInfo:nil repeats:YES];
}

-(void)handle
{
    switch (count)
    {
        case 0:
            [self.delegate sleep];
            count++;
            break;
        case 1:
            [self.delegate eat];
            count++;
            break;
        case 2:
            [self.delegate work];
            [timer  invalidate];
            break;
    }
}

@end

时间: 2024-08-04 14:39:47

iOS 委托模式 理解例子的相关文章

蓝懿IOS委托模式代理模式

今天刘国斌老师讲了有关oc语言里的委托模式(代理模式),通过了一个打地鼠的游戏讲解了委托模式的功能作用,之后连带讲解了协议的书写和使用. 打地鼠功能包括屏幕随机出现地鼠,点击消失,如果不点击5秒后自动消失,屏幕右上角有一个label显示点击的数量:编写思维是,首先在文件里粗昂见一个类,在类里重写init方法,加上每.5秒出现的事件,倒入viewcontroler文件,在地鼠类里声明一个属性delegate,在button点击事件加上创建对象点delegate调用viewcontroler里的加分

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

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

iOS.常用设计模式.02.委托模式

WTDelegate #import <Foundation/Foundation.h> @protocol WTDelegate <NSObject> @required - (void)sleep; - (void)eat; - (void)work; @end WTPhilosopher.h #import <Foundation/Foundation.h> #import "WTDelegate.h" @interface WTPhiloso

iOS常用设计模式之委托模式

委托模式在Cocoa Touch框架和Cocoa框架中都有很多的应用.例如在应用启动的时候需要的一个类:UIApplication.在程序的入口函数main函数里面: int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([WBAppDelegate class])); } } UIApplication的方法UIAppl

[objective-c] 05 - 委托模式回调

本章主要讲解委托模式以及通过委托模式实现的回调接口. 1.委托模式 委托模式是OC语法独有的开发模式.是基于组件拼装的一种快速开发模式.该模式下,可以保证组件的高度灵活性和通用性.属于组件的一种开放式接口. 下面通过一个现实生活中的场景简单理解下委托模式的应用. 例如我们现在有一个公司.公司想要进行IPO.可是公司老总并不熟悉资本操作,这时候就需要委托一个人或者一个机构来作这件事. 公司首先要提出能做IPO这件事的详细要求,然后通过猎头寻找合适的人选. 用代码描述应该是这样的: 首先用协议描述公

iOS代理模式

iOS代理模式的简单理解:当一个对象无法直接获取到另一个对象的指针,又希望对那个变量进行一些操作时,可以使用代理模式. 代理主要由三部分组成: (1)协议:用来指定代理双方可以做什么,必须做什么. (2)代理:根据指定的协议,完成委托方需要实现的功能. (3)委托:根据指定的协议,指定代理去完成什么功能. 代理使用步骤 1.申明一个协议  (这个写在需要被获取的对象里面,也可以单独写一个类) @protocol TextDelegate -(void)deliverFirsttext:(NSSt

android classloader双亲委托模式

概述 ClassLoader的双亲委托模式:classloader 按级别分为三个级别:最上级 : bootstrap classLoader(根类加载器) : 中间级:extension classLoader (扩展类加载器) 最低级 app classLoader(应用类加载器). 根(Bootstrap)类加载器:该加载器没有父加载器.它负责加载虚拟机的核心类库,如java.lang.*等.例如java.lang.Object就是由根类加载器加载的.根类加载器从系统属性sun.boot.

c#委托的理解和基础学习

 C#委托的理解和基础学习 Delegate,委托,是c#中非常重要的一个概念,使用委托使程序员可以将方法引用封装在委托对象内.然后可以将该委托对象传递给可调用所引用方法的代码,而不必在编译时知道将调用哪个方法.与C或C++中的函数指针不同,委托是面向对象,而且是类型安全的.用最通俗易懂的话来讲,你就可以把委托看成是用来执行方法(函数)的一个东西.在使用委托的时候,你可以像对待一个类一样对待它.即先声明,再实例化.只是有点不同,类在实例化之后叫对象或实例,但委托在实例化后仍叫委托. 比如:

委托模式精讲

委托的作用有两个,一个是传值,一个是传事件. 委托用到的最多的用途 回传值(回调) 当我们声明了遵循的协议的属性时,属性的关键字要用weak或者assign,目的是为了避免循环引用 委托模式,它的特点是,一对一 用途是用在有上下级关系的两个view,不能跨级调用 例如:ReadViewController这个类里面是一个阅读小说的界面,现在有个需求:想改变小说的背景颜色和字体颜色,而它本身有不想做这件事,这是它就会找个代理SetViewController,帮他完成这一转变. #import "