<?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>';