第七天-重构

//
//  main.m
//  08-重构
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

/*
 设计模式:
 大牛们在软件件开发过程中总结出来的经验
// 使用代理模式场景
 delegate:
 1、当A类对象发生什么事想通知B类型对象 (B类对象成为A类对象的代理)
 2、A类中有些事情,自己无法处理,需要B类对象帮助其处理 (B类对象成为A类对象的代理)
 3、B类对象向知道A类对象中发生的事情 (B类对象成为A类对象的代理)
 
 婴儿 与 保姆
 
 婴儿想吃的时候要通知保姆 (保姆就是婴儿的代理)
 婴儿想吃了但是自己不会吃,需要保姆帮忙  (保姆就是婴儿的代理)
 保姆想知道婴儿什么时候想吃了(保姆就是婴儿的代理)
 
//步骤
 
  1、A类对象发生事情向要给外边发一个通知来让其他类的实例对象帮做事情
  2、在A类中定义协议 Adelegate,协议中写希望其他的实例对象帮做事情
  3、在A类中定义一个属性 id<Adelegate> delegate
  4、当A类对象发生事情就去通知它的代理来做事情,这个时候需要判断它的代理是否真的有能力帮它来做
  5、B类型对象想成为A类对象代理的类,就要要遵守ADelegate的协议
  6、实现自己想要监听的方法
  7、让B类对象成为A类对象的代理
 
 */

#import <Foundation/Foundation.h>
#import "CZBaby.h"
#import "CZNurse.h"
#import "CZStudent.h"
#import "CZTeacher.h"
int main(int argc, const char * argv[]) {
  
    CZBaby *baby = [[CZBaby alloc] init];
    CZNurse * nurse = [[CZNurse alloc] init];
    baby.delegate = nurse;
    [baby wantToEat];
    
    CZStudent *stu = [[CZStudent alloc] init];
    baby.delegate = stu;
    [baby wantToEat];
    
    CZTeacher *teacher = [[CZTeacher alloc] init];
    baby.delegate = teacher;
    [baby wantToEat];
    
    
    return 0;
}


//
//  CZBaby.h
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>




@class CZBaby;

//@protocol BaoMu <NSObject>
//
////喂婴儿
//- (void) feedBabay:(CZBaby *) baby;
//
//@end

@protocol CZBabayDelegate <NSObject>

//喂婴儿
- (void) feedBabay:(CZBaby *) baby;

@end

@interface CZBaby : NSObject

@property (nonatomic,strong) id<CZBabayDelegate> delegate;


//@property (nonatomic,strong) id<BaoMu> baomu;

//用于记录婴儿吃了多个克奶粉
@property (nonatomic,assign) int food;

- (void) wantToEat;


@end


//
//  CZBaby.m
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZBaby.h"

@implementation CZBaby

- (void) wantToEat
{
// 如果代理真正的实现这个方法,我们才去调用它
   if ([self.delegate respondsToSelector:@selector(feedBabay:)]) {
         [self.delegate feedBabay:self];
    }
   
}

@end


//
//  CZNurse.h
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZBaby.h"


@interface CZNurse : NSObject <CZBabayDelegate>


@end

//
//  CZNurse.m
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZNurse.h"
#import "CZBaby.h"
@implementation CZNurse

//喂婴儿
- (void) feedBabay:(CZBaby *) baby
{
    baby.food += 15;
    NSLog(@"%s,food = %d",__func__,baby.food);
}
@end

//
//  CZStudent.h
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZBaby.h"

@interface CZStudent : NSObject <CZBabayDelegate>

@end


//
//  CZStudent.m
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZStudent.h"
#import "CZBaby.h"
@implementation CZStudent

//喂婴儿
- (void) feedBabay:(CZBaby *) baby
{
    baby.food += 30;
    NSLog(@"%s,food = %d",__func__,baby.food);
}

@end

//
//  CZTeacher.h
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CZBaby.h"

@interface CZTeacher : NSObject <CZBabayDelegate>

@end

//
//  CZTeacher.m
//  1202-分类
//
//  Created by Apple on 14/12/2.
//  Copyright (c) 2014年 itcast. All rights reserved.
//

#import "CZTeacher.h"
#import "CZBaby.h"

@implementation CZTeacher

- (void) feedBabay:(CZBaby *) baby
{
    
    baby.food += 20;
    NSLog(@"%s,food = %d",__func__,baby.food);
}

@end


你可能感兴趣的:(第七天-重构)