6. 适配器模式(Adapter)
6. 适配器模式(Adapter)
问题:已有接口和目标接口不兼容,不想改老代码。
核心:写一个适配层,把旧接口转换成新接口。
// 旧接口:华氏温度
class OldWeatherAPI {
getTemp() { return 98.6; }
}
// 适配器:转成摄氏度
class CelsiusAdapter {
#oldAPI;
constructor(api) { this.#oldAPI = api; }
getTempC() { return (this.#oldAPI.getTemp() - 32) * 5 / 9; }
}
const adapter = new CelsiusAdapter(new OldWeatherAPI());
console.log(adapter.getTempC().toFixed(1)); // 37.0package adapter
// 旧接口:华氏温度
type OldWeatherAPI struct{}
func (o OldWeatherAPI) GetTempF() float64 { return 98.6 }
// 目标接口:摄氏温度
type CelsiusProvider interface {
GetTempC() float64
}
// 适配器
type CelsiusAdapter struct {
old OldWeatherAPI
}
func NewCelsiusAdapter(old OldWeatherAPI) CelsiusProvider {
return &CelsiusAdapter{old: old}
}
func (a *CelsiusAdapter) GetTempC() float64 {
return (a.old.GetTempF() - 32) * 5 / 9
}