适配器模式
比如, 在大陆用的手机充电器, 并不能直接在德国使用, 因为电源接口类型不一致. 如果想使用的话, 需要在充电器上面加一个转接器(适配器), 才能插在插排上.
问题描述
代码示例
#![deny( warnings, clippy::all, clippy::cargo, clippy::nursery, clippy::pedantic )] #![allow(dead_code)] pub trait Lion { fn roar(&self) { println!("I am a Lion"); } } struct AfricanLion {} impl Lion for AfricanLion { fn roar(&self) { println!("I am an African Lion"); } } struct AsianLion {} impl Lion for AsianLion { fn roar(&self) { println!("I am an Asian Lion"); } } struct Hunter {} impl Hunter { #[must_use] pub const fn new() -> Self { Self {} } #[allow(clippy::unused_self)] pub fn hunt(&self, lion: &impl Lion) { lion.roar(); } } struct WildDog {} impl WildDog { #[allow(clippy::unused_self)] pub fn bark(&self) { println!("I am a wild dog"); } } struct WildDogAdapter { dog: WildDog, } impl WildDogAdapter { #[must_use] pub const fn new(dog: WildDog) -> Self { Self { dog } } } impl Lion for WildDogAdapter { fn roar(&self) { self.dog.bark(); } } fn main() { let dog = WildDog {}; let dog_adapter = WildDogAdapter::new(dog); let hunter = Hunter::new(); hunter.hunt(&dog_adapter); }