代理模式的特点
- 对扩展开放,对修改封闭
- 代理delegation是一种定义对象之间关系的设计模式,如果一个对象的行为由另一个对象定义或者协助完成,那后者就是前者的代理被代理者将操作委托给其代理
- 代理模式解耦了被代理类和代理类
代理模式的实现
@protocol WindowDrawDelegate<NSObject>
-(void)draw;
@end
@interface Window : NSObject
@property(nonatomic,weak) id<WindowDrawDelegate> delegate;
-(void) draw;
@end
#import "Window.h"
#import "Rectangle.h"
#import "Circle.h"
@implementation Window
@synthesize delegate;
-(void)draw{
[delegate draw];
}
@end
#import "Window.h"
@interface Circle : NSObject<WindowDrawDelegate>
-(void)draw;
#import "Window.h"
@interface Rectangle : NSObject<WindowDrawDelegate>
-(void)draw;
#import "Rectangle.h"
#import "Window.h"
#import "Circle.h"
@autoreleasepool {
Window * w = [[Window alloc] init];
Rectangle * rec = [[Rectangle alloc] init];
Circle * c = [[Circle alloc] init];
w.delegate = rec;
[w draw];
w.delegate = c;
[w draw];
}