版本記錄
版本號(hào) | 時(shí)間 |
---|---|
V1.0 | 2017.04.29 |
前言
前面講了23種設(shè)計(jì)模式中的前幾個(gè),下面我們繼續(xù)笑诅,先看前幾篇文章平委。
1. 23種設(shè)計(jì)模式(一)
2. 23種設(shè)計(jì)模式(二)
3. 23種設(shè)計(jì)模式(三)
4. 23種設(shè)計(jì)模式(四)
5. 23種設(shè)計(jì)模式(五)
6. 23種設(shè)計(jì)模式(六)
7. 23種設(shè)計(jì)模式(七)
8. 23種設(shè)計(jì)模式(八)
9. 23種設(shè)計(jì)模式(九)
詳述
十九间唉、職責(zé)鏈模式——Chain of Responsibility
使多個(gè)對(duì)象都有機(jī)會(huì)處理請(qǐng)求,從而避免請(qǐng)求的發(fā)送者和接受者之間的耦合關(guān)系唱蒸,將這個(gè)對(duì)象連成一條鏈傳遞該請(qǐng)求,直到有一個(gè)對(duì)象處理它為止烛愧。先看一下原理圖油宜。
看代碼組織結(jié)構(gòu)。
看代碼怜姿。
1. ViewController.m
#import "ViewController.h"
#import "HCDMnager.h"
#import "HCDCommonManager.h"
#import "HCDMajorManager.h"
#import "HCDGenaralManager.h"
#import "HCDReuquest.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
HCDCommonManager *common = [[HCDCommonManager alloc]initWithName:@"豬經(jīng)理"];
HCDMajorManager *majon = [[HCDMajorManager alloc]initWithName:@"狗總監(jiān)"];
HCDGenaralManager *genaral = [[HCDGenaralManager alloc]initWithName:@"蛤蟆總經(jīng)理"];
common.superior = majon;
majon.superior = genaral;
HCDReuquest *request = [[HCDReuquest alloc]init];
request.requestType = @"請(qǐng)假";
request.number = 5;
[common dealRequest:request];
request.number = 20;
[common dealRequest:request];
request.number = 220;
[common dealRequest:request];
request.number = 1200;
[common dealRequest:request];
}
@end
2. HCDMnager.h
#import <Foundation/Foundation.h>
@class HCDMnager,HCDReuquest;
@interface HCDMnager : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, strong) HCDMnager *superior;
- (instancetype)initWithName:(NSString *)name;
- (void)dealRequest:(HCDReuquest *)request;
@end
3. HCDMnager.m
#import "HCDMnager.h"
#import "HCDReuquest.h"
@implementation HCDMnager
- (instancetype)initWithName:(NSString *)name
{
self = [super init];
if (self) {
_name = name;
}
return self;
}
- (void)dealRequest:(HCDReuquest *)request
{
}
@end
4. HCDReuquest.h
#import <Foundation/Foundation.h>
@interface HCDReuquest : NSObject
@property (nonatomic, copy) NSString *requestType;
@property (nonatomic, assign) NSInteger number;
@end
5. HCDReuquest.m
#import "HCDReuquest.h"
@implementation HCDReuquest
@end
6. HCDCommonManager.h
#import "HCDMnager.h"
@interface HCDCommonManager : HCDMnager
@end
7. HCDCommonManager.m
#import "HCDCommonManager.h"
#import "HCDReuquest.h"
@implementation HCDCommonManager
- (void)dealRequest:(HCDReuquest *)request
{
if ([request.requestType isEqualToString:@"請(qǐng)假"] && request.number < 10) {
NSLog(@"%@處理了%@,時(shí)間是%ld",self.name,request.requestType,request.number);
}
else{
[self.superior dealRequest:request];
}
}
@end
8. HCDMajorManager.h
#import "HCDMnager.h"
@interface HCDMajorManager : HCDMnager
@end
9. HCDMajorManager.m
#import "HCDMajorManager.h"
#import "HCDReuquest.h"
@implementation HCDMajorManager
- (void)dealRequest:(HCDReuquest *)request
{
if ([request.requestType isEqualToString:@"請(qǐng)假"] && request.number < 50) {
NSLog(@"%@處理了%@,時(shí)間是%ld",self.name,request.requestType,request.number);
}
else{
[self.superior dealRequest:request];
}
}
@end
10. HCDGenaralManager.h
#import "HCDMnager.h"
@interface HCDGenaralManager : HCDMnager
@end
11. HCDGenaralManager.m
#import "HCDGenaralManager.h"
#import "HCDReuquest.h"
@implementation HCDGenaralManager
- (void)dealRequest:(HCDReuquest *)request
{
if ([request.requestType isEqualToString:@"請(qǐng)假"] && request.number < 500) {
NSLog(@"%@處理了%@,時(shí)間是%ld",self.name,request.requestType,request.number);
}
else{
NSLog(@"%@不同意%@,時(shí)間是%ld",self.name,request.requestType,request.number);
}
}
@end
看結(jié)果慎冤。
2017-04-29 10:58:55.169 19職責(zé)鏈模式[1184:25440] 豬經(jīng)理處理了請(qǐng)假,時(shí)間是5
2017-04-29 10:58:55.170 19職責(zé)鏈模式[1184:25440] 狗總監(jiān)處理了請(qǐng)假,時(shí)間是20
2017-04-29 10:58:55.170 19職責(zé)鏈模式[1184:25440] 蛤蟆總經(jīng)理處理了請(qǐng)假,時(shí)間是220
2017-04-29 10:58:55.170 19職責(zé)鏈模式[1184:25440] 蛤蟆總經(jīng)理不同意請(qǐng)假,時(shí)間是1200
結(jié)論:思想。
二十沧卢、中介者模式——Mediator
??用一個(gè)中介對(duì)象來(lái)封裝一系列的對(duì)象交互蚁堤,中介者使各個(gè)對(duì)象不需要顯式地相互引用,從而使其耦合松散但狭,而且可以獨(dú)立地改變它們之間的交互披诗。先看一下原理示例圖。
下面看一下代碼結(jié)構(gòu)圖立磁。
下面看代碼呈队。
1. ViewController.m
#import "ViewController.h"
#import "HCDColleagueA.h"
#import "HCDColleagueB.h"
#import "HCDAbstractMediator.h"
#import "HCDMediator.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
HCDAbstractColleague *colleagueA = [[HCDColleagueA alloc]init];
HCDAbstractColleague *colleagueB = [[HCDColleagueB alloc]init];
HCDAbstractMediator *mediator = [[HCDMediator alloc]initWithColleagueA:colleagueA colleagueB:colleagueB];
colleagueA.mediator = mediator;
colleagueB.mediator = mediator;
colleagueA.number = 1450;
colleagueB.number = 1450;
[colleagueA notice];
NSLog(@"%f---%f",colleagueA.number,colleagueB.number);
colleagueB.number = 123;
[colleagueB notice];
NSLog(@"%f---%f",colleagueA.number,colleagueB.number);
}
@end
2. HCDAbstractColleague.h
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
@class HCDAbstractMediator;
@interface HCDAbstractColleague : NSObject
@property (nonatomic, assign) CGFloat number;
- (void)notice;
@property(nonatomic,strong) HCDAbstractMediator *mediator;
@end
3. HCDAbstractColleague.m
#import "HCDAbstractColleague.h"
#import "HCDAbstractMediator.h"
@implementation HCDAbstractColleague
@end
4. HCDMediator.h
#import <Foundation/Foundation.h>
#import "HCDAbstractMediator.h"
@interface HCDMediator : HCDAbstractMediator
@end
5. HCDMediator.m
#import "HCDMediator.h"
@implementation HCDMediator
@synthesize colleagueB = _colleagueB;
@synthesize colleagueA = _colleagueA;
- (instancetype)initWithColleagueA:(HCDAbstractColleague *)colleagueA colleagueB:(HCDAbstractColleague *)colleagueB
{
self = [super init];
if (self) {
_colleagueA = colleagueA;
_colleagueB = colleagueB;
}
return self;
}
- (void)setValueToColleagueA:(CGFloat)value
{
self.colleagueA.number = value * 100;
}
- (void)setValueToColleagueB:(CGFloat)value
{
self.colleagueB.number = value * 0.01;
}
@end
6. HCDColleagueA.h
#import "HCDAbstractColleague.h"
@interface HCDColleagueA : HCDAbstractColleague
@end
7. HCDColleagueA.m
#import "HCDColleagueA.h"
#import "HCDAbstractMediator.h"
@implementation HCDColleagueA
- (void)notice
{
[self.mediator setValueToColleagueB:self.number];
}
@end
8. HCDColleagueB.h
#import "HCDAbstractColleague.h"
@interface HCDColleagueB : HCDAbstractColleague
@end
9. HCDColleagueB.m
#import "HCDColleagueB.h"
#import "HCDAbstractMediator.h"
@implementation HCDColleagueB
- (void)notice
{
[self.mediator setValueToColleagueA:self.number];
}
@end
10. HCDAbstractMediator.h
#import <Foundation/Foundation.h>
#import "HCDColleagueB.h"
#import "HCDColleagueA.h"
@interface HCDAbstractMediator : NSObject
- (instancetype)initWithColleagueA:(HCDAbstractColleague *)colleagueA colleagueB:(HCDAbstractColleague *)colleagueB;
@property (nonatomic, weak) HCDAbstractColleague *colleagueA;
@property (nonatomic, weak) HCDAbstractColleague *colleagueB;
- (void)setValueToColleagueA:(CGFloat)value;
- (void)setValueToColleagueB:(CGFloat)value;
@end
11. HCDAbstractMediator.m
#import "HCDAbstractMediator.h"
@implementation HCDAbstractMediator
@end
看結(jié)果。
2017-04-29 11:23:14.332 20中介者模式[1615:39216] 1450.000000---14.500000
2017-04-29 11:23:14.333 20中介者模式[1615:39216] 12300.000000---123.000000
結(jié)論:思想唱歧。
后記
??今天是五一放假的第一天宪摧,起來(lái)的有點(diǎn)晚,大約十點(diǎn)多才起床颅崩,起來(lái)了以后才想起來(lái)有一篇還沒(méi)寫几于,就接著寫了,下午再寫一篇沿后,給23種設(shè)計(jì)模式一個(gè)了結(jié)沿彭,再次謝謝大家。
?