关于代理模式的理解

1.代理模式:现实生活中总是听到代理商、总代理商什么的,代理模式就是和这个差不多。一个厂商生产了一批产品,厂商自己不去卖产品,而是找另一个人去卖这些产品。最简单的理解就是自己要做的事情,自己不去做,而是去找别人去做。

下面的例子就是用代理实现一个厂商生产了一批产品,代理另一家厂商去卖这些产品。

2.首先是实现厂家类(Manufacturer),我们再想想,厂家和代理之前是不是应该有一种关系,就像现实生活中一样,你要去代理一样商品去卖的时候,肯定要和厂家签合同什么的,就是一种联系。所以在程序中如何去实现这种关系呢?这就要用到协议,我们用一个协议去规范厂家类和代理商类两者的联系。如果有另一家代理商想代理这家厂商的产品,只要实现这个协议就可以卖他的商品了。就像代理商不能把安踏的东西改成李宁的去卖。代理商A(AgentA)、代理商B(AgentB)、代理协议(MaunDelegate),分别如下:

Manufacturer----->厂商

MaunDelegate---->厂商与代理商之前的协议

AgentA------------>代理商A

AgentB------------>代理商B

//文件一------------厂商类的头文件 Manufacturer.h
#import <Foundation/Foundation.h>
@interface Manufacturer:NSObject
//这个方法相当于找别的代理
- (void)saleGoods:(int)number;
//这个方法设置自己的协议
- (void)setDelegate:(id)newDelegate;
@end
//文件二-------------厂商类的实现 Manufacturer.m
#import <Foundation/Foundation.h>
#import <MaunDelegate.h>
@interface Manufacturer()
{
    id<ManuDelegate> delegate;
}
@end
@implementation Manufacturer
{
    if(delegate!=nil)
    {
        [delegate saveGoods:number];
    }
}
- (void)setDelegate:(id)newDelegate
{
    delegate = newDelegate;
}
@end
//文件三------------代理协议
#import <Foundation/Foundation.h>
@protocol MaunDelegate<NSObject>
- (void)saveGoods:(int)number;
@end
//文件四----------代理商A 头文件
#import <Foundation/Foundation.h>
#import "MaunDelegate.h"
@interface AgentA : NSObject <MaunDelegate>
- (void)saveGoods:(int)number;
@end
//文件五-------------实现文件
#import "AgentA.h"

@implementation AgentA
- (void)saveGoods:(int)number
{
    NSLog(@"我是代理商A,我从厂商那里进货的数量是%d,我要把这么多东西都卖出去~",number);
}
@end
//文件六----------代理商B 头文件
#import <Foundation/Foundation.h>
#import "MaunDelegate.h"
@interface AgentB : NSObject <MaunDelegate>
- (void)saveGoods:(int)number;
@end
//文件七-------------实现文件
#import "AgentA.h"

@implementation AgentB
- (void)saveGoods:(int)number
{
    NSLog(@"我是代理商B,我从厂商那里进货的数量是%d,我要把这么多东西都卖出去~",number);
}
@end

//文件8 -------------主函数

        Maunfacturer *m = [[Maunfacturer alloc] init];
        AgentA *a = [[AgentA alloc] init];
        AgentB *b = [AgentB alloc] init];
        //设置自己的代理为代理A
        [m setDelegate:a];
        [m saleGoods:20];
        //设置自己的代理为代理B
        [m setDelegate:b];
        [m saleGoods:20];







你可能感兴趣的:(关于代理模式的理解)