用代理实现多态的例子

/*

代理:.......................................................................................

【委托方】主动方 持有带协议的id指针,可以使用协议。

【代理方】被动方 遵从协议,实现方法。

代理:.......................................................................................

*/

//main.m

#import <Foundation/Foundation.h>

#import "Computer.h"

#import "USBMouse.h"

#import "USBFan.h"

#import "USBDisk.h"

int main(int argc, const char * argv[]) {

//创建出一台电脑

Computer *computer=[[Computer alloc] init];

//向电脑的USB接口中插入不同的USB设备

//USBDisk *udisk=[[USBDisk alloc] init];

//USBMouse *umouse=[[USBMouse alloc] init];

USBFan *ufan=[[USBFan alloc] init];

computer.delegate=ufan;

//USB设备就开始工作了

[computer doWork];

return 0;

}

//UsbProtocol.h

/*

USB接口的协议

只要遵从这个协议,该设备就可以插入到电脑上的USB接口上进行工作

*/

#import <Foundation/Foundation.h>

@protocol UsbProtocol <NSObject>

//运行的方法

- (void)execute;

@end

//USBDisk.h

//U盘

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface USBDisk : NSObject<UsbProtocol>

@end

//USBDisk.m

#import "USBDisk.h"

@implementation USBDisk

- (void)execute

{

NSLog(@"进行数据的存储");

}

@end

//USBMouse.h

//USB鼠标

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface USBMouse : NSObject<UsbProtocol>

@end

//USBMouse.m

#import "USBMouse.h"

@implementation USBMouse

- (void)execute

{

NSLog(@"开始操作电脑");

}

@end

//USBFan.h

//USB风扇

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface USBFan : NSObject<UsbProtocol>

@end

//USBFan.m

#import "USBFan.h"

@implementation USBFan

- (void)execute

{

NSLog(@"开始送风");

}

@end

//Computer.h

//电脑

#import <Foundation/Foundation.h>

#import "UsbProtocol.h"

@interface Computer : NSObject

//相当于有一个USB接口,可以插入不同的USB设备

//持有协议的id指针属性

@property (weak) id<UsbProtocol> delegate;

//USB工作的方法

-(void) doWork;

@end

//Computer.m

#import "Computer.h"

@implementation Computer

- (void)doWork

{

[self.delegate execute];

}

@end

//2015-09-08 08:32:56.186 demo4[892:38137] 开始送风

时间: 2024-08-25 09:10:56

用代理实现多态的例子的相关文章

016: class and objects &gt; 多重继承与多态的例子

房屋代理模型: 1. Property class Property(object): def __init__(self, square_feet='', num_bedrooms='', num_baths='', **kwargs): super().__init__(**kwargs) self.square_feet = square_feet self.num_bedrooms = num_bedrooms self.num_baths = num_baths def display

多态小例子

<?php interface Computer { public function version(); public function work(); } class NoteComputer implements Computer { public function version(){ echo '笔记本'; } public function work(){ echo '可以便携运行WIN7!!'; } } class DesktopComputer implements Comput

代理的回调的例子

/* 回调函数不是由该函数的实现方法直接调 用,而是在特定的事件或条件发生时由另外的一 方调用的,用于对该事件或条件进行响应. 回调:....................................................................................... 委托方:huangwenjia 遵从协议,实现回调的方法,设定代理方 代理方:wushentao持有协议id指针,用于设定委托方 回调……………………………………………………………… */

一个使用enum实现多态的例子

下面的写法与直接 使用静态方法而言,可读性.可维护性更强是不是有DSL的感觉.... 当然enum反编译后,的确就是静态方法. /** * Created by MyWorld on 2016/8/3. */ public enum Operation { PLUS("+") { @Override public int apply(int x, int y) { return x + y; } }, MINUS("-") { @Override public in

C++的多态例子

1.多态的例子 题目: 某小型公司,主要有四类员工(Employee):经理(Manager).技术人员(Technician).销售经理(SalesManager)和推销员(SalesMan).现在,需要存储这些人员的姓名(name).编号(id).当月薪水(salary).计算月薪总额并显示全部信息.人员编号基数为 1000,每输入一个人员工信息编号顺序加 1. 月薪计算办法是:经理拿固定月薪 8000 元:技术人员按每小时 100 元领取月薪:推销员的月薪按该推销员当月销售额的 4%提成:

Java类型信息与应用--动态代理

Java类型信息与应用--动态代理 本文结构 一.前言 二.为什么需要RTTI 三.RTTI在java中的工作原理 四.类型转化前先做检测 五.动态代理 六.动态代理的不足 一.前言 运行时信息使你可以在程序运行时发现和使用类型信息 Java在运行时识别对象和类的信息的方式: 1.一种是RTTI,它假定我们在编译时已经知道了所有的类型. 2.另一种是"反射"机制,它允许我们在运行时发现和使用类的信息. 这带来的好处是,你可以在程序运行时发现和使用类型信息 二.为什么需要RTTI 以多态

java里对多态的了解

java中多态性的理解 什么是多态? 1.面向对象的三大特性 封装,继承,多态,从一定角度看封装和继承都是为多态准备的. 2.多态的定义:允许不同的类对同一消息作出反应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式. 3.实现多态的技术叫做动态绑定,是指在执行期间判断所引用对象的实际类型,根据其实际的类型调用其相应的方法. 4.多态的作用是消除类型之间的耦合关系. 现实生活中多态的例子:比如f1在word里是word的帮助文档,在eclipse里就是eclipse的帮助文档,在不同的

23种设计模式--代理模式-Proxy

一.代理模式的介绍       代理模式我们脑袋里出现第一个词语就是代购,其实就是这样通过一个中间层这个中间成是属于什么都干什么都买得,俗称"百晓生",在平时得开发中我们经常会听到什么远程代理,虚拟代理等等这一些都是代理模式得具体例子,来个官方定义就是给某一个对象提供一个代理,并由代理对象控制对原对象的引用:下面我们用代购的例子来说明一下这个情况:你想买一台iphone,国行有点贵,然后拜托海外的朋友买一台给你带回来,就是这样的一个例子,首先我们先将买东西这个主题抽象出来,然后再把真实

【转 】C#中的接口实现多态

C#中的接口实现多态 我们都知道虚方法实现多态,抽象方法实现多态等,我们今天来看看如何使用接口实现多态 1.首先我们先要来了解了解什么是接口,它存在的意识 01.接口就是为了约束方法的格式(参数和返回值类型)而存在的 02.接口可以实现多继承,弥补单继承的缺陷.  03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知 04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体 05.如果一个类实现了某个接口,就得实现该接口中所有的方法 06.接口要谨慎使用,防止出现接口污染!