设计模式-Adapter(适配器模式)
适配器模式
定义:适配器模式将一个类的接口转换成客户期望的另一个接口,适配器让原本不兼容的类可以合作无间。
个人理解:适配器模式,有三个角色,调用者,适配器,被适配的对象即功能提供者,调用者只能通过一个特定的接口来调用例如指定的方法名称,而提供功能的对象可以提供类似的功能,但是跟对方的接口是不匹配的,这个就需要中间一个适配器来做中转。适配器有两种模式一种是对象适配器,一种是类适配器,对象适配器需要传递一个实例化的对象然后封装一个新的适配接口调用这个对象的被适配的功能,而类适配器需要继承被适配的对象,实现未被适配的接口
<?php /** * @desc 在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。 * 简单点说,适配器模式是指:定义一个类,将一个已经存在的类,转换成目标接口所期望的行为形式。 */ //Part 对象适配器 namespace ObjectAdapter{ interface ServerInterface{ public function funcOne(); public function funcTwo(); } class Server{ public function funcOne(){ echo __FUNCTION__; } public function funcThree(){ echo __FUNCTION__; } } class ServerAdapter implements ServerInterface{ private $server; public function __construct(Server $server){ $this->server = $server; } public function funcOne(){ $this->server->funcOne(); } public function funcTwo(){ $this->server->funcThree(); } } class Client{ public function getServerInfo(){ //$server = new Server(); $server = new Server(); $serverAdapter = new ServerAdapter($server); $serverAdapter->funcOne();//funcOne $serverAdapter->funcTwo();//funcThree } } $client = new Client(); $client->getServerInfo(); echo "\r\n"; } namespace ClassAdapter{ //PartOne 类适配器 class Server{ public function funcOne(){ echo __FUNCTION__; } //Server代码 这个函数稍后会被 funcThree 代替 这个函数会被舍掉 /* public function funcTwo(){ echo __FUNCTION__; 被更改的函数 } */ //Server代码 public function funcThree(){ echo __FUNCTION__; } } interface Adapter{ public function funcOne(); public function funcTwo(); } class ServerAdapter extends Server implements Adapter{ public function funcTwo(){ parent::funcThree(); } } class Client{ public function getServerInfo(){ //$server = new Server(); $server = new ServerAdapter(); $server->funcOne();//funcOne $server->funcTwo();//funcThree } } $client = new Client(); $client->getServerInfo(); }