1. 对外统一,将一些截然不同的函数接口封装成统一的api,最简单的例子就是DB类了,有mysqlpdo,项目中同时有几种数据库存在,因为有各自的api,所以适配器模式是将几种不同的数库封装成统一的api,对外就是统一的方式调用<br />各自的api 接口名称不一样,通过适配器模式,统一成一个名称,对然调用一致<br />很经典的例子,插座,电压不一样,电源适配器,跟适配器模式差不多,不符合要求,加个适配器<br />将一个类的接口转换成客户希望的另外一个接口,Adapter模式使得原本接口不兼容的而不能一起工作的类,一起工作
    1. //基本的发短信类
    2. class Message{
    3. public function send(){
    4. echo "阿里云发送短信!" . PHP_EOL;
    5. }
    6. public function push(){
    7. echo "阿里云发送推送!" . PHP_EOL;
    8. }
    9. }
    10. //接口不一致的极光类
    11. class JiguangMessage{
    12. public function send_out_msg(){
    13. echo "极光发送短信!" . PHP_EOL;
    14. }
    15. public function push_msg(){
    16. echo "极光发送推送!" . PHP_EOL;
    17. }
    18. }
    19. //适配器极光,统一接口名称
    20. class JiguangSDKAdapter extends Message{
    21. private $message;
    22. public function __construct($message){
    23. $this->message = $message;
    24. }
    25. public function send(){
    26. $this->message->send_out_msg();
    27. }
    28. public function push(){
    29. $this->message->push_msg();
    30. }
    31. }
    32. //接口不一致百度云类
    33. class BaiduYunMessage{
    34. public function transmission_msg(){
    35. echo "百度云发送短信!" . PHP_EOL;
    36. }
    37. public function transmission_push(){
    38. echo "百度云发送推送!" . PHP_EOL;
    39. }
    40. }
    41. //适配器百度云,统一接口名称
    42. class BaiduYunSDKAdapter extends Message{
    43. private $message;
    44. public function __construct($message){
    45. $this->message = $message;
    46. }
    47. public function send(){
    48. $this->message->transmission_msg();
    49. }
    50. public function push(){
    51. $this->message->transmission_push();
    52. }
    53. }
    54. $jiguangMessage = new JiguangMessage();
    55. $baiduYunMessage = new BaiduYunMessage();
    56. $message = new Message();
    57. // 原来的老系统发短信,使用阿里云
    58. $message->send();
    59. $message->push();
    60. // 部分模块用极光发吧
    61. $jgAdatper = new JiguangSDKAdapter($jiguangMessage);
    62. $jgAdatper->send();
    63. $jgAdatper->push();
    64. // 部分模块用百度云发吧
    65. $bdAatper = new BaiduYunSDKAdapter($baiduYunMessage);
    66. $bdAatper->send();
    67. $bdAatper->push();
    适配器主要是维护一个外部对象,很少去增加功能,一般是直接替换,