什么是适配器
适配器设计模式只是将某个对象的接口适配为另一个对象所期望的接口。
设计情景
假如我们原始的有一个UserInfo的类,提供用户信息的类,早起设计该类的时候,只实现了一个getUserName获取用户名的方法。
我们的MyOldObject类中,将从UserInfo这个类中获取用户信息,并且输出用户名
随着时间的推移,我们旧的UserInfo这个类只提供的获取用户名的方法,已经没法满足需求,我们同时需要获取用户的年龄等信息。
为了不改变原本UserInfo这个类,我们就继承UserInfo,建立一个UserInfoAdapter类,实现getAge获取年龄这样的方法。
在我们的MyNewObject新的类中,我们实例化UserInfoAdapter,打印出用户姓名和年龄。
这样,随着我们的扩展,我们没有改变原先UserInfo这个类和使用这个类的接口,我们通过适配的方法,将UserInfo类扩展出来
代码设计
UserInfo类,实现getUserName方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
<?php
//早期的一个用户类,只实现获取用户名的方法
class UserInfo
{
public function getUserName()
{
return '小叨';
}
}
class MyOldObject
{
public function write()
{
$UserInfo = new UserInfo;
return $UserInfo->getUserName();
}
}
$a = new MyOldObject;
$a->write();
class UserInfoAdapter extends UserInfo
{
public function getUserAge()
{
return 30;
}
public function getUser()
{
return array(
'username' => $this->getUserName(),
'age' => $this->getUserAge()
);
}
}
class MyNewObject
{
public function write()
{
$UserInfoAdapter = new UserInfoAdapter;
return $UserInfoAdapter->getUser();
}
}
$a = new MyNewObject;
$rs = $a->write();
var_dump($rs);
|