阿呆终于坐上皇帝的宝座啦。手下有刑部、工部、吏部。。。等部门要管呢,每个部门又有#%#¥%……乱七八糟的系统。怎么办?很简单啦,一道圣旨解决问题,下面该怎么做就怎么做,我不管。
关系图:
代码如下:
// TaiJian.h 太监,传达皇帝指令
@interface TaiJian : NSObject
- (id)init;
- (void)neiZhengOne;// 内政方案一
- (void)neiZhengTwo;// 内政方案二
@end
// TaiJian.m
#import "TaiJian.h"
#import "XingBu.h"
#import "GongBu.h"
#import "LiBu.h"
@implementation TaiJian
{
XingBu *_xb;
GongBu *_gb;
LiBu *_lb;
}
- (id)init
{
if(self = [super init])
{
_xb = [[XingBu alloc] init];
_gb = [[GongBu alloc] init];
_lb = [[LiBu alloc] init];
}
return self;
}
- (void)neiZhengOne
{
NSLog(@"执行内政方案一:");
[_xb jiaFa];// 刑部:加薪
[_gb shuiLi];// 工部:修水利
[_lb shengZi];吏部:升官
}
- (void)neiZhengTwo
{
NSLog(@"执行内政方案二:");
[_xb zhiDing];// 刑部:制定法律
[_gb gaiLou];// 工部:盖楼房
[_lb jiangZi];// 吏部:降职
}
// XingBu.h 刑部系统
@interface XingBu : NSObject
- (void)jiaFa;// 罚款
- (void)zhiDing;// 制定法律
@end
// XingBu.m
static NSString *name = @"刑部";
@implementation XingBu
- (void)jiaFa
{
NSLog(@"%@:每个人罚款10块",name);
}
- (void)zhiDing
{
NSLog(@"%@:增加一条法律",name);
}
@end
// GongBu.h 工部系统
@interface GongBu : NSObject
- (void)shuiLi;
- (void)gaiLou;
@end
//GongBu.m
static NSString *name = @"工部";
@implementation GongBu
- (void)shuiLi
{
NSLog(@"%@:修水利",name);
}
- (void)gaiLou
{
NSLog(@"%@:造宫殿",name);
}
@end
// LiBu.h 吏部系统
@interface LiBu : NSObject
- (void)shengZi;// 升职
- (void)jiangZi;// 降职
@end
#import "TaiJian.h" // 阿呆皇帝
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
TaiJian *tj = [[TaiJian alloc] init];
[tj neiZhengOne];// 执行方案一
[tj neiZhengTwo];// 执行方案二
}
优点:
1.可以很好的封装子系统,留一个接口(太监)提供给客户(阿呆)使用
2.子系统也许错综复杂,用一个接口(太监),把流程(方案一、二)写好,一个函数调用就行,很方便
适用性:
1.当你要为一个复杂子系统提供一个简单接口时
2.客户端与实现需要分离,降低依赖性时,方便移植。如上皇帝与各部门中间隔了个太监,这样依赖性就降低了