feature: dyld && LD 链接器

This commit is contained in:
杭城小刘
2024-06-29 16:00:34 +08:00
parent 1a8659e143
commit 13f7457be9
367 changed files with 12893 additions and 3049 deletions

View File

@@ -1,5 +1,7 @@
# 桥接模式
## 概念理解
桥接模式也叫作桥梁模式,英文是 Bridge Design Pattern。这个模式可以说是 23 种设计模式中最难理解的模式之一了。我查阅了比较多的书籍和资料之后发现,对于这个模式有两种不同的理解方式。
@@ -84,5 +86,88 @@ public class DriverManager {
实际上JDBC 本身就相当于“抽象”。注意这里所说的“抽象”指的并非“抽象类”或“接口”而是跟具体的数据库无关的、被抽象出来的一套“类库”。具体的Driver比如com.mysql.jdbc.Driver就相当于“实现”。注意这里所说的“实现”也并非指“接口的实现类”而是跟具体数据库相关的一套“类库”。JDBC 和 Driver 独立开发通过对象之间的组合关系组装在一起。JDBC 的所有逻辑操作,最终都委托给 Driver 来执行。
## 业务解耦
假设有这样一个场景:业务有个 TableView 列表,版本迭代的时候,后端的接口不变变化,有 V1、V2、V3这3个版本需要共存该怎么设计
假设列表相关逻辑是 `BaseObjectA`,后端接口相关是 `BaseObjectB`
`BaseObject1` 是因为需要处理接口 V1、V2、V3 而产生的基类,具体子类 ObjectA1 等处理具体逻辑;
```objective-c
// BaseObjectA
@interface BaseObjectA : NSObject
// 桥接模式的核心实现
@property (nonatomic, strong) BaseObjectB *objB;
// 获取数据
- (void)handle;
@end
@implementation BaseObjectA
/*
A1 --> B1、B2、B3 3种
A2 --> B1、B2、B3 3种
A3 --> B1、B2、B3 3种
*/
- (void)handle {
// override to subclass
[self.objB fetchData];
}
@end
// ObjectA1
@interface ObjectA1 : BaseObjectA
@end
@implementation ObjectA1
- (void)handle {
// before 业务逻辑操作
[super handle];
// after 业务逻辑操作
}
@end
```
`BaseObject2` 是处理数据接口相关的基类,`ObjectB1` 是具体 V1 的实现
```objective-c
// BaseObjectB
@interface BaseObjectB : NSObject
- (void)fetchData;
@end
@implementation BaseObjectB
- (void)fetchData {
// override to subclass
}
@end
@interface ObjectB1 : BaseObjectB
@end
@implementation ObjectB1
- (void)fetchData {
// 具体的逻辑处理
}
@end
```
使用
```objective-c
ObjectA1 *objA = [[ObjectA1 alloc] init];
BaseObjectB *b1 = [[BaseObjectB alloc] init];
objA.objB = b1;
[objA handle];
```
桥接模式可以解决这种业务兼容的适配问题。
## 总结
桥接模式有两种理解方式。第一种理解方式是“将抽象和实现解耦,让它们能独立开发”。这种理解方式比较特别,应用场景也不多。另一种理解方式更加简单,类似“组合优于继承”设计原则,这种理解方式更加通用,应用场景比较多。