怎么在PHP中使用适配器模式?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
- <李>
假如我们原始的有一个用户信息的类,提供用户信息的类,早起设计该类的时候,只实现了一个getUserName获取用户名的方法。
李> <李>我们的MyOldObject类中,将从用户信息这个类中获取用户信息,并且输出用户名
李> <李>随着时间的推移,我们旧的用户信息这个类只提供的获取用户名的方法,已经没法满足需求,我们同时需要获取用户的年龄等信息。
李> <李>为了不改变原本用户信息这个类,我们就继承用户信息,建立一个UserInfoAdapter类,实现getAge获取年龄这样的方法。
李> <李>在我们的MyNewObject新的类中,我们实例化UserInfoAdapter,打印出用户姓名和年龄。
李> <李>这样,随着我们的扩展,我们没有改变原先用户信息这个类和使用这个类的接口,我们通过适配的方法,将用户信息类扩展出来
李>代码实现过程如下:
& lt; PHP ?//早期的一个用户类,只实现获取用户名的方法 class UserInfo  { ,,,public function getUserName (), { ,,,,,,,return & # 39; initphp& # 39;; ,,,} }
//MyOldObject类,从用户信息类中获取信息,输出用户名 php & lt; ? include_once (“UserInfo.php"); class MyOldObject  { ,,,public function 写(),{ ,,,,,,,UserInfo 美元;=,new 用户信息; ,,,,,,,echo 用户信息→美元getUserName (); ,,,} } $ a =, new MyOldObject; 美元→写();
上述代码是早期的时候,我们使用的案例。然而UserInfoAdapter类,随着时间推移,项目需求在变化,用户信息类无法满足需求,我们做了用户信息类的适配器,满足新功能的需求,如下:
& lt; php ? include_once (“UserInfo.php"); class UserInfoAdapter  extends 用户信息{ ,,,public function getUserAge (), { ,,,,,,,return 28岁; ,,,} ,,,public function getUser (), { ,,,,,,,return 阵列( ,,,,,,,,,,,& # 39;用户名# 39;,=祝辞,$ this→getUserName (), ,,,,,,,,,,,& # 39;年龄# 39;,=祝辞,$ this→getUserAge () ,,,,,,,); ,,,} }
MyNewObject类,新功能的类,需要打印出用户年龄和姓名,用户信息类无法满足需求,需要调用UserInfoAdapter适配器这个类,如下:
& lt; php ? include_once (“UserInfoAdapter.php"); class MyNewObject  { ,,,public function 写(),{ ,,,,,,,UserInfoAdapter 美元;=,new UserInfoAdapter; ,,,,,,,print_r()美元UserInfoAdapter→getUser ()); ,,,} } $ a =, new MyNewObject; 美元→写();
大概了解了哈,接下来咱们通过一个故事来了解下。
开始的时候,黑枣玩具公司专门生产玩具,生产的玩具不限于狗、猫、狮子,鱼等动物,并且每个玩具都可以进行”张嘴”与“闭”嘴操作,分别调用了openMouth与closeMouth方法。在这个时候,黑枣玩具公司的程序猿就定义一个抽象类玩具,甚至是接口玩具,完事其他的类去继承父类,实现父类的方法,很和谐的是吧。
后来,为了扩大业务,也因为红枣遥控公司可以使用遥控设备对动物进行嘴巴控制,黑枣玩具公司打算与红枣遥控公司合作。不过,麻烦的是,红枣遥控公司的遥控设备是调用的动物的doMouthOpen及doMouthClose方法,所以,黑枣玩具公司的程序员现在必须要做的是对玩具系列类进行升级改造,使玩具能调用doMouthOpen及doMouthClose方法。
在考虑实现的方法时,黑枣玩具公司的程序猿可以再在他们的父类子类里给红枣遥控公司添加这么两个方法就好啦。但是,当黑枣玩具公司的程序猿一次又一次在父类子类里面重复添加着这两个方法的时候,总会想着如此重复的工作,难道不能解决么?当有数百个子类的时候,程序员会改疯的。程序员往往比的是谁在不影响效率的时候更会“偷”懒,这样做下去程序员会觉得自己很傻。
咱也不废话了,先来看下最开始的时候的代码:
abstract class 玩具 { public 才能abstract function  openMouth (); public 才能abstract function  closeMouth (); } class Dog  extends 玩具 { public 才能;function  openMouth () {才能 ,,,echo “Dog open 嘴\ n"; ,,} public 才能;function  closeMouth () {才能 ,,,echo “Dog open 嘴\ n"; ,,} } class Cat  extends 玩具 { public 才能;function  openMouth () {才能 ,,,echo “Cat open 嘴\ n"; ,,} public 才能;function  closeMouth () {才能 ,,,echo “Cat open 嘴\ n"; ,,} }怎么在PHP中使用适配器模式