OC中代理设计模式

一.基本概念

首先说到设计模式,我们就要了解什么是设计模式,设计,顾名思义,对一种已经产生或者还没有产生的事物,通过人类的智慧,并通过实践,使某些物品产生具有某种价值的过程,那什么又是模式呢,模式就是大家遵循的一种规则,一种规范.设计模式就是某些已经被设计好的结构的一种规范.

那么,一种普遍被人们所熟知的设计模式是怎么解释的呢?

设计模式(Design pattern) 是一套被反复使用,大多数人(这里指的是大多程序员)知晓的,经过分类编目的,代码设计经验的总结.

在代码设计中,使用设计模式是为了可以重用代码,让代码更容易的让其他程序员理解,具备高可靠性的.设计模式减轻了大多数程序员的负担,于自己,于他人都是多赢的.

代理设计模式:

那什么是代理设计模式呢,打个比方,我现在想要买化妆品,一般情况下,我们回去商店购买,而不会去化妆品的生产厂家去购买,那么,这里的商店就是我们的一个代理,就像现在很多化妆品啊,面膜啊,护肤品,采用的各级代理的销售模式,这里,每一个卖化妆品,护肤品的人就是生产厂家的代理.


二.了解protocol

说到代理设计模式,不得不提到protocol,我们现在只是给出大家一个概念,protocol在代理中是必须存在的,那么,protocol有什么用呢?
协议就相当于java中的接口,java中,因为单继承机制,为了扩展单继承,使用到了interface,实现接口,在OC中,同样有这样的机制,这就是协议,OC中也是单继承,为了弥补单继承的缺陷,我们使用到了协议.

2.1protocol的使用注意

1)Protocol:就一个用途,用来声明一大堆的方法,注意:(不能声明成员变量),不能写实现.
@protocol SportProtocol <NSObject>
{
    int _age; // 错误写法
}
- (void)playFootball;
- (void)playBasketball;
@end



2)只要父类遵守了某个协议,那么子类也遵守.
@protocol SportProtocol <NSObject>

- (void)playFootball;
- (void)playBasketball;
@end
#import "SportProtocol.h"
@interface Student : NSObject <SportProtocol>//Student继承NSObject,遵循SportProtocol协议
@end

@interface GoodStudent : Student//GoodStudent继承于Student,所以即相当于要遵守Student中的协议
@end

@implementation GoodStudent
- (void)playFootball//实现协议中的方法
{
    NSLog(@"%s", __func__);
}
- (void)playBasketball
{
    NSLog(@"%s", __func__);
}
@end

3)OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(< >)
#import "SportProtocol.h"
#import "StudyProtocol.h"

@interface Student : NSObject <SportProtocol, StudyProtocol>//同时遵守SportProtocol和StudyProtocol协议,仅继承了NSObject类

@end

4)协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明

@protocol A
-(void)methodA;
@end

@protocol B <A>
-(void)methodB;
@end

@interface Student : NSObject <B>
-(void)methodA; // 同时拥有A/B协议中的方法声明
-(void)methodB;
@end

2.2基协议

NSObject是一个基类,最根本最基本的类,任何其他类最终都要继承它

还有名字也叫NSObject的协议,它是一个基协议,最根本最基本的协议

NSObject协议中声明很多最基本的方法

description

retain

release建议每个新的协议都要遵守NSObject协议

@protocol SportProtocol <NSObject> // 基协议

- (void)playFootball;
- (void)playBasketball;
@end


2.3 require和option关键字

protocol中,有两个关键字,一个是require,另一个是option
@require关键字要求,协议中的方法必须实现,否则编译器报错
@option关键字要求,协议中的方法是选择实现的,如果遵守协议的了,不实现也不会报错
@protocol SportProtocol <NSObject>

@required // 如果遵守协议的类不实现会报警告
- (void)playFootball;
@optional // 如果遵守协议的类不实现不会报警告
- (void)playBasketball;
@end

2.4协议的创建

说完协议的基本概念,我们来看看协议是怎么创建的吧
一般情况下,协议是以模板的方式进行创建具体步骤如下
1)点击主函数,快捷键command+n;
2.)点击创建OC-File模板
3.分别填写协议名称,File Type下拉选择Protocol
4)协议中的代码
#import <Foundation/Foundation.h>

@protocol SportProtocol <NSObject>
// 方法声明列表
- (void)playFootball;
- (void)playBasketball;
- (void)playBaseball;
@end

5)实现中的代码
command+n创建Cocoa Class,Person类
Person.h中
#import <Foundation/Foundation.h>
#import "SportProtocol.h"
@interface Person : NSObject<SportProtocol>

@end

Person.m中
.m文件中直接实现协议的方法
#import "Person.h"

@implementation Person

- (void)playFootball
{
    NSLog(@"%s", __func__);
}

- (void)playBasketball
{
    NSLog(@"%s", __func__);
}

- (void)playBaseball
{
    NSLog(@"%s", __func__);
}
@end

今天就先将@Protocol的基本概念写到这里,下一篇将是如何用Protocol进行代理设计模式的代码编写.





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值