【PHP设计模式 10_ShiPeiQi.php】适配器模式

时间:2022-06-28 00:14:25
<?php
/**
 * 【适配器模式】
 * 对于服务器的代码,需要不同的客户端都可以调用
 * 也可能是新的程序员要修改以前程序员写的老代码
 */

header("Content-type: text/html; charset=utf-8");

//假设现在有一段很早的老代码,用户类
class User{
    public static function getUserInfo(){
        $info = array(
            'name'=>'zhangsan',
            'age'=>28,
            'hobby'=>'study'
        );
        //当时可能使用的是 serialize 序列化处理方式与客户端交互
        $res = serialize($info);
        return $res;
    }
}

//当时的客户端代码:PHP调用
$uinfo = unserialize(User::getUserInfo());
////注意这里的 “,” 逗号也可以 替代之前使用的 “.” 点号
echo '姓名:',$uinfo['name'],'<br>';
echo '年龄:',$uinfo['age'],'<br>';
echo '爱好:',$uinfo['hobby'],'<hr>';

//若干年后,有新的安卓客户端需要调用,在不改动原有服务器端代码的情况下,写一个适配器...
//也可能是新的程序员要修改以前程序员写的老代码,需要以json格式输出
class AdapterUser extends User{
    public static function getUserInfo(){
        $old_info = parent::getUserInfo();
        $new_info = unserialize($old_info);
        $res = json_encode($new_info);
        return $res;
    }
}
//新的客户端调用
$usinfo = json_decode(AdapterUser::getUserInfo());
//注意此时对象的调用方式(也可以上面json_decode后面价格参数 true,改成数组,此处注重测试)
echo '姓名:',$usinfo->name,'<br>';
echo '年龄:',$usinfo->age,'<br>';
echo '爱好:',$usinfo->hobby,'<hr>';