设计模式-适配器模式
2023-09-27 14:24:38 时间
在我们平常用的手机充电器,就是一个适配器,它把我们日常使用的交流电通过手机充电器(适配器)转化成手机使用的直流电。
适配器模式Adapter Pattern: (结构型模式)
将一个接口转换为客户希望的另外一个接口,适配器模式使接口不兼容的那些类可以一起工作
适配器别名又叫包装器 Wrapper。
模式中的角色:
1 目标接口(Target):客户所期待的接口。目标可以是具体的或抽象的类,也可以是接口。
2 需要适配的类(Adaptee):需要适配的类或适配者类。
3 适配器(Adapter):通过包装一个需要适配的对象,把原接口转换成目标接口。
示例:
1: 使用继承模式
<?php /* 使用继承的适配器模式 <?php class Adapter extends YourClass implements OtherInterface ?> */ //已经实现了鲸鱼类 class Whale { public function __construct() { $this->name = "Whale"; } public function eatFish() { echo "whale eat fish. \n"; } } //已经实现了鲤鱼类 class Carp { public function __construct() { $this->name = "Carp"; } public function eatMoss() { echo "Carp eat moss. \n"; } } //现在要建一个动物馆 interface Animal { function eatFish(); function eatMoss(); } //但是我们不能修改Whale 和 Carp类,于是用Adapter模式 class WhaleAdapter extends Whale implements Animal { public function __construct() { $this->name = "Whale"; } public function eatMoss() { echo "Whale do not eat moss. \n"; } } class CarpAdapter extends Carp implements Animal { public function __construct() { $this->name = "Carp"; } public function eatFish() { echo "Carp do not eat moss. \n"; } } $whaleAdpter = new WhaleAdapter(); $whaleAdpter->eatFish(); $whaleAdpter->eatMoss(); $carpAdapter = new CarpAdapter(); $carpAdapter->eatFish(); $carpAdapter->eatMoss();
2:使用组件的适配器模式
<?php /* 使用组件的适配器模式 */ //已经实现了鲸鱼类 class Whale { public function __construct() { $this->name = "Whale"; } public function eatFish() { echo "whale eat fish. \n"; } } //已经实现了鲤鱼类 class Carp { public function __construct() { $this->name = "Carp"; } public function eatMoss() { echo "Carp eat moss. \n"; } } //现在要建一个动物馆 interface Animal { function eatFish(); function eatMoss(); } class WhaleAdapter implements Animal { public function __construct() { $this->name = "Whale"; $this->whale = new Whale(); } public function eatFish() { $this->whale->eatFish(); } public function eatMoss() { echo "Whale do not eat moss. \n"; } } class CarpAdapter implements Animal { public function __construct() { $this->name = "Carp"; $this->carp = new Carp(); } public function eatFish() { echo "Carp do not eat moss. \n"; } public function eatMoss() { $this->carp->eatMoss(); } } $whaleAdpter = new WhaleAdapter(); $whaleAdpter->eatFish(); $whaleAdpter->eatMoss(); $carpAdapter = new CarpAdapter(); $carpAdapter->eatFish(); $carpAdapter->eatMoss();
来自:http://csprojectedu.com/2016/03/18/PHPDesignPatterns-10/
相关文章
- 设计模式复习-适配器模式
- 怎样让孩子爱上设计模式 —— 7.适配器模式(Adapter Pattern)
- php设计模式-适配器模式
- Java描述设计模式(17):调停者模式
- 设计模式1——策略模式 | 适配器模式 | 工厂模式
- 设计模式java——工厂方法模式
- 设计模式:迭代器模式
- 初学Java常用设计模式之——适配器模式
- 初学Java常用设计模式之——原型模式
- 设计模式之责任链模式讲解
- Java 设计模式:代理、适配器、桥接、装饰、外观、享元、组合模式
- centos虚拟机网络配置--桥接模式
- Java设计模式之结构型:适配器模式
- 深入Java设计模式之适配器模式
- 设计模式-适配器模式
- java模式:模板模式的简单理解
- 【设计模式】迭代器模式
- 【设计模式】职责链模式
- 设计模式入门之訪问者模式Visitor
- 设计模式 ( 十八 ) 策略模式Strategy(对象行为型)
- 单例模式的八种写法比较
- 设计模式的七条原则 适配器模式实现
- 23种设计模式之适配器模式(Adapter)
- 面试官:设计模式中的适配器模式是什么?