发布时间:2022-11-03 文章分类:编程知识 投稿人:赵颖 字号: 默认 | | 超大 打印

简介

适配器模式属于结构型设计模式。
将一个类的接口转换成可应用的兼容接口。适配器使原本由于接口不兼容而不能一起工作的那些类可以一起工作。
适配器模式有两种实现方案,一种是继承的方式,一种是组合的方式。

适用场景:

  1. 兼容不方便更改的“祖传”代码。
    归纳具有相似点的模块,比如Laravel FileSystemAdapter。

优点:

  1. 扩展了原有类,增强了扩展性。
  2. 无需修改原有代码,符合开闭原则。

缺点:

由于PHP不支持多继承,一次最多只能适配一个适配者类。

代码:

//用户类,获取用户信息,这是个老项目
class User {
    public function getUserInfo() {
        return serialize([
            'id'    => 1,
            'name'  => 'zs',
            'phone' => '18888888888',
            'email' => '18888888888@gmail.com'
        ]);
    }
}
//老调用端口,由于这种序列化语法是PHP特有的,但是一旦扩展调用端的种类,比如添加java,安卓调用,其它调用端的接口将无法使用,为此需要做出优化。
$user = new User();
echo $user->getUserInfo() . PHP_EOL;
//优化 使用继承的方式
class UserAdapter1 extends User {
    public function getUserInfo() {
        $old_user_info = parent::getUserInfo();
        return json_encode(unserialize($old_user_info));
    }
}
//调用端
$user_new = new UserAdapter1();
echo $user_new->getUserInfo() . PHP_EOL;
//优化 使用组合的方式
class UserAdapter2 {
    public function getUserInfo() {
        $old_user_info = (new User)->getUserInfo();
        return json_encode(unserialize($old_user_info));
    }
}
//调用端
$user_new = new UserAdapter2();
echo $user_new->getUserInfo() . PHP_EOL;
```php