通过协议和代理实现买水的功能

来源:互联网 发布:倚天屠龙记星河源码 编辑:程序博客网 时间:2024/05/01 22:22

一.什么是协议?

    协议就是:如果我想做某件事,但是自己又不想去做,于是我找到了另外一个人,但是他必须有办着件事的能力(方法),于是我和他签订协议,让他去实现我所要的目的.这就是协议,只要具备我所定下的做某件事的功能,我就能喝他签订协议.说起协议了,就不能忽视方法了.
    方法: 就是能实现某件事,另外一个人要怎么做.再次说明一下,声明的方法,如果没有特别的说明,可以不实现,但是如果方法不实现那么干嘛要声明呢.所以呢一般声明的方法必须要实现.
//@required;必须实现,不实现就会有警告,程序如果你没特别说明,那么默认就是.
//@optional;表示这个方法你可以实现,也可以不实现.
    上面是有关协议的两个关键字.
    那么我们来系统的说一下:
//1.如果存在继承关系,那么子类也拥有父类遵守协议里的所有方法.
//2.一个类可以有多个协议.
//3.协议可以遵守协议(表示一个协议调用有它遵守的协议里的所有方法).
    上面说的三点比较重要,搞懂这些能更熟练的运用他们.

二.什么是代理?

    那么又什么是代理呢?找别人(代理对象)帮我干事情(达成需求),说起来和协议还是有点像的.但是怎么用呢,我们来看看下面吧.
//1.定义一个协议:在协议里区定义达成需求所需要的行为.
//2.定义一个代理对象:让这个代理对象遵守这个协议,同时实现这个协议里的方法.
//3.让另外一个对象定义一个id(对象).并限定这个属性的类型必须遵守这个协议,然后把代理对象设置给id(对象).最后,在这个对象中调用代理对象取实现需求.
    这就是代理的基本用法.

三.通过协议和代理实现买水的功能

    一个大老板如果想要去买水,但是有不想自己动手,于是他通过第三方的方法,首先要明确一个人是否具有买水的功能,比如:问价格,付钱,找地方等等.然后让对方去代理,并且帮老板买到想要喝的水.那么我们来看看代码吧.
    首先是创建的(.m)文件和(.h)文件.



   那么接下来就是个部分的分文件了.
#import <Foundation/Foundation.h>//要遵守的协议,里面有必须要实现的方法@protocol Protocoltax <NSObject>
-(void)buyWaterForboss;//买水给老板的方法声明</span>
-(void)askPrice;//询问价格的方法声明</span>
-(void)pay;//付钱的方法声明</span>
@end

上面写的是方法的是协议里面的方法的申明,主要是需要实现的一些功能,便于代理能够遵守.

        那么我们来看看代理的部分吧.

#import <Foundation/Foundation.h>
#import "Protocoltax.h"
@interface Person : NSObject<Protocoltax>
@end

      上面这段是代理的(.h)文件,里面主要是引入了一个头文件,并且让(Person)这个类遵守协议Protocoltax,那么这样这个类就拥有了协议里面的方法了,通过直接签订协议的方法使得Person这个类也就拥有了方法了.

      下面就是代理里面的功能实现的部分了:

#import "Person.h"@implementation Person-(void)buyWaterForboss{     NSLog(@"老板,你的水来了.....");//打印一句话     [self askPrice];//用self方法调用自己的对象方法     [self pay];//用self调用自己的对象方法}//实现询问多少钱这个方法-(void)askPrice{    NSLog(@"请问多少钱一瓶.....");}//实现付钱的方法-(void)pay{    NSLog(@"给你钱....."); }@end

       上面的这段主要是实现代理从协议那里签订下来的功能,由于性质的原因,代理也拥有了协议的方法(.m)文件

       接下来就是老板这部分了,也就是命令的一方:(.h)文件

#import <Foundation/Foundation.h>#import "Person.h"@interface Me : NSObject//首先就是高效的定义了一个强指针,并且定义了一个asstistant,并且使得其遵守协议.@property(nonatomic,strong)id<Protocoltax>asstistant;-(void)buyWater;//定义了一个买水的方法@end

       首先这是一个老板(我)的(.h)文件.实现了什么功能呢?这段代码主要是先定义了自己的一个买水的方法,然后交给他自己的方法的实现取用.那么就是接下来的方法的实现了.

#import "Me.h"@implementation Me-(void)buyWater{    [self.asstistant buyWaterForboss];//通过点语法的方法得到自己定义的asstistant,然后让其去调用买水的功能.}@end

       (.m)这段代码主要是通过自己上面定义的方法,然后去间接的调用Person里面的买水的方法当然,这是最后买到水之后的结果.里面包含了买水的一些方法,比如:问价格,付钱等.

       最后了,我们来看主函数吧(main).

#import <Foundation/Foundation.h>#import "Person.h"#import "Me.h"int main(int argc, const char * argv[]) {    @autoreleasepool {        //创建对象p,是一个指针        Person *p = [[Person alloc] init];        //创建对象m        Me *m = [[Me alloc] init];        //通过m这个对象,然后把p这个对象赋值给m,那么会使得asstistant得到person里面的方法.        m.asstistant = p;        //调用自己定义的买水的方法.        [m buyWater];    }    return 0;}
     上面这段是主函数的部分,主要通过指针的调用和赋值得到想要实现的目的.也是间接的实现了.那么最后我们来看看结果吧.

2015-12-17 00:20:29.306 108-买水2[3956:1331812] 老板,你的水来了.....2015-12-17 00:20:29.307 108-买水2[3956:1331812] 请问多少钱一瓶.....2015-12-17 00:20:29.307 108-买水2[3956:1331812] 给你钱.....

四.那么上面就是一段用代理和协议实现的一个简单的买水的功能,希望你们能喜欢.




        


   

    

  




    
1 0