设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是长时间被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的试验和错误总结出来的。
使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。
桥接模式
定义:将抽象部分与它的实现部分分离,使它们都可以独立地变化。
原理:抽象层与实现层相分离,抽象层定义了供客户端调用的抽象接口,实现层提供了具体的逻辑.实现类的引用被封装到抽象层的实例中桥接就形成。
应用举例
用遥控器控制电视,将遥控器和电视都抽象出一个抽象类,具体实现让他们的子类去做。
实例UML图- 先抽象出电视机类:TV
@interface TV : NSObject
// 电视机提供给外界调用的一个抽象方法,具体实现由子类去做
- (void)loadCommand:(NSString *)command;
@implementation TV
- (void)loadCommand:(NSString *)command {
//父类不实现,由子类去实现
}
@end
- 再抽象出遥控器类:Remote,并且引用一个TV类。
#import "TV.h"
@interface Remote : NSObject
@property (nonatomic, strong) TV *tv;
- 创建遥控器子类:SubRemote
@interface SubRemote : Remote
//扩展一些方法,符合开闭原则
- (void)up;
- (void)down;
- (void)left;
- (void)right;
@implementation SubRemote
- (void)up {
[self.tv loadCommand:@"up"];
}
- (void)down {
[self.tv loadCommand:@"down"];
}
- (void)left {
[self.tv loadCommand:@"left"];
}
- (void)right {
[self.tv loadCommand:@"right"];
}
- 创建电视机子类
子类一:TVXiaoMI,并实现父类方法
@interface TVXiaoMI : TV
@implementation TVXiaoMI
- (void)loadCommand:(NSString *)command {
NSLog(@"您按的是XM:----%@",command);
}
子类二:TVKJ,并实现父类方法
@interface TVKJ : TV
@implementation TVKJ
- (void)loadCommand:(NSString *)command {
NSLog(@"您按的是KJ:----%@",command);
}
创建的两个子类都分别对父类的方法进行了不同地实现。
- 调用
// 遥控器调用康佳电视
SubRemote *subRemote = [[SubRemote alloc] init];
subRemote.tv = [[TVKJ alloc] init];
[subRemote up];
// 遥控器来调用小米
subRemote.tv = [[TVXiaoMI alloc] init];
[subRemote up];
[subRemote down];
打印结果
您按的是KJ:----up
您按的是XM:----up
您按的是XM:----down
网友评论