使用正式协议的委托模式 protocol

来源:互联网 发布:淘宝上便宜衣服来源 编辑:程序博客网 时间:2024/04/27 19:16
/*
     委托模式
     两个对象间不能够直接联系,需要通过一个第三方对象,帮助他们联系,这一种模式,我们称之为'委托模式'
     
     如何在OC中使用委托模式?在OC中实现委托模式需要OC中的一个元素'protocol',即协议
     */

#import <Foundation/Foundation.h>@protocol SaleHouse <NSObject>   //SaleHouse协议文件@required-(void)saleHouse;-(void)payMoney;@end


#import <Foundation/Foundation.h>#import "SaleHouse.h"@class Landlord;  //@class 告诉编译器有这个类的存在@interface HouseSaler : NSObject<SaleHouse>@property(nonatomic,assign) Landlord *customer;//中介的客户@end#import "HouseSaler.h"#import "Landlord.h"@implementation HouseSaler-(void)saleHouse    //实现协议里买房子的方法{    NSLog(@"我是中介,我替登记者卖房子");}-(void)payMoney  //实现协议里付款的方法{    NSLog(@"我是中介,我把房子卖了,钱已经达到你账上");    [self.customer receiveMoney];  //回调委托的方法}@end

#import <Foundation/Foundation.h>#import "SaleHouse.h"   //导入协议头文件@interface Landlord : NSObject//这里使用assign 是为了防止循环引用   使用正式协议的委托模式@property(nonatomic,assign) id<SaleHouse> delegate;-(void)saleHouse;-(void)receiveMoney;@end#import "Landlord.h"@implementation Landlord-(void)saleHouse{    //如果委托存在并且委托遵循指定协议    if (self.delegate && [self.delegate conformsToProtocol:@protocol(SaleHouse)])    {        NSLog(@"我是房东,我已经将房子登记到中介了!");        [self.delegate saleHouse];  //调回委托卖房的方法         [self.delegate payMoney];  //调回委托付钱的方法        }}-(void)receiveMoney{    NSLog(@"我是房东,钱已经收到,谢谢中介!!!");   }@end

#import "ViewController.h"#import "HouseSaler.h"#import "Landlord.h"@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];       HouseSaler *houseSaler = [HouseSaler new];  //中介对象    Landlord *landlord = [Landlord new];        //房东对象    landlord.delegate = houseSaler; //中介作为房东的代理    houseSaler.customer = landlord; //房东作为中介的客户    [landlord saleHouse];  //房东卖房    }- (void)didReceiveMemoryWarning {    [super didReceiveMemoryWarning];    // Dispose of any resources that can be recreated.}@end


1 0
原创粉丝点击