一.基本概念
首先说到设计模式,我们就要了解什么是设计模式,设计,顾名思义,对一种已经产生或者还没有产生的事物,通过人类的智慧,并通过实践,使某些物品产生具有某种价值的过程,那什么又是模式呢,模式就是大家遵循的一种规则,一种规范.设计模式就是某些已经被设计好的结构的一种规范.
那么,一种普遍被人们所熟知的设计模式是怎么解释的呢?
设计模式(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
#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进行代理设计模式的代码编写.