这两天在慕课网上学习设计模式,其中适配器模式一节很多人评价讲的不对,我就在网上搜集学习了一下,理解了这个模式。
其中有一篇文章我觉得很好,是用JAVA写的适配器模式,我看完觉得很好,我就用自己的方法用PHP写了一下这个模式。
那篇文章的地址在这里:http://blog.csdn.net/zhangjg_blog/article/details/18735243
百度百科对适配器的定义如下:
在计算机编程中,适配器模式(有时候也称包装样式或者包装)将一个类的接口适配成用户所期待的。一个适配允许通常因为接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
举个例子:
现在你有一个小米手机需要充电,但是你家里只有三孔插板(为什么家里只有三孔插板?因为你家里有两孔插板的话我怎么举例子^_^),小米手机充电的话只能用两孔插板,那么怎么办呢?现在就需要你个适配器了,它的作用就是将三孔插板转换成两孔插板,支持对小米手机的充电,同时呢,还支持对原来三孔设备的充电功能(这里说一句题外话,设计原则的开-闭原则,意思就是支持扩展,防止内部修改,这个在以后的学习中在说吧),这个时候适配器就闪亮登场了。
<?php
// 提供三孔充电接口
interface threeHoleInterface
{
public function support3();
}
// 三孔插板
class threeHole implements threeHoleInterface
{
public function support3()
{
echo "我只能对三孔设备进行充电\n";
}
}
// 提供两孔充电接口
interface twoHoleInterface
{
public function support2();
}
// 两孔插板
class twoHole implements twoHoleInterface
{
public function support2()
{
echo "我只能对两孔设备进行充电\n";
}
}
// 适配器 实现三孔接口,转换为两孔接口
class Adapter implements threeHoleInterface
{
public $turn;
public function __construct(twoHoleInterface $phone)
{
$this->turn = $phone;
}
// 两孔充电方法
public function support2()
{
$this->turn->support2();
}
// 三孔充电方法
public function support3()
{
echo "三控设备我还可以为你充电呢\n";
}
}
// 测试
// 首先实现一个两孔插板
$twoHoleFunction = new twoHole();
// 三孔插板现在有了适配器
$threeHoleFunction = new Adapter($twoHoleFunction);
// 三孔插板自身对三孔设备充电的功能还有
$threeHoleFunction->support3();
// 现在还可以对两孔设备进行充电了
$threeHoleFunction->support2();