资讯专栏INFORMATION COLUMN

PHP设计模式(十):适配器模式

paney129 / 592人阅读

摘要:原文地址设计模式十适配器模式在设计模式七设计模式分类中我们提到过结构设计模式,结构设计模式专注于设计对象和实例的构建组合过程。适配器模式在不修改现有代码的基础上,保留了架构。

原文地址:PHP设计模式(十):适配器模式

Introduction

在PHP设计模式(七):设计模式分类中我们提到过结构设计模式(Structural patterns),结构设计模式专注于设计对象(Object)和实例(Instance)的构建、组合过程。
结构设计模式包括下面七种设计模式:

适配器(Adapter)

桥接(Bridge)

合成(Composite)

装饰(Decorator)

外部(Facade)

轻量(Flyweight)

代理(Proxy)

请无视拗口的中文翻译。结构设计模式着重于低耦合、高复用、高可维护性、高拓展性的设计原则。

适配器模式

适配器模式是一种利用适配器将现有的实现,适配到已有接口的设计模式,最常见的例子就是变压器,将已有的5V输入的电器,通过变压器,适配到220V的电源插座。
适配器模式利用PHP设计模式(四):继承中我们提到过的继承(inheritance),以及PHP设计模式(六):MVC中我们提到过的组件(composition)来进行模式设计。
相比继承,组件可用性高,低耦合,冗余度低,因此推荐采用组件的模式来进行设计。

何时使用适配器模式?

简单来说,当你的实现和需要的接口,都无法修改的时候。
例如,你需要给甲方已有的系统做标准的兼容,标准不可修改,甲方的系统也不可修改,这个时候你就需要适配器的设计模式了。
对于web编程来说,将你现有的实现,和三方库结合起来,就需要使用适配器模式。

使用继承的适配器模式

简单来说,就是:

还是用前面的鲸鱼和鲤鱼的例子来说明如何使用适配器,假设我们已经实现了鲸鱼类和鲤鱼类:

name = "Whale";
  }
  public function eatFish() {
    echo "Whale eat fish.
";
  }
}
class Carp {
  public function __construct() {
    $this->name = "Carp";
  }
  public function eatMoss() {
    echo "Carp eat moss.
";
  }
}
?>

假设我们现在需要建一个动物馆,有eatFish()和eatMoss()接口,动物馆接口如下:

但是我们不能修改Whale和Carp类,这里就需要使用适配器了,创建两个适配器:

name = "Whale";
  }
  public function eatMoss() {
    echo "Whale don"t eat moss.
";
  }
}
class CarpAdapter extends Carp implements Animal {
  public function __construct() {
    $this->name = "Carp";
  }
  public function eatFish() {
    echo "Carp don"t eat moss.
";
  }
}
?>

然后是调用代码:

eatFish();
$whaleAdapter->eatMoss();
$carpAdapter = new CarpAdapter();
$carpAdapter->eatMoss();
$carpAdapter->eatFish();
?>

运行一下:

Whale eat fish.
Whale don"t eat moss.
Carp eat moss.
Carp don"t eat moss.
使用组件的适配器模式

还是使用鲸鱼和鲤鱼的例子,不过这个时候适配器变成了:

name = "Whale";
    $this->whale = new Whale();
  }
  public function eatFish() {
    $this->whale->eatFish();
  }
  public function eatMoss() {
    echo "Whale don"t eat moss.
";
  }
}
class CarpAdapter implements Animal {
  public function __construct() {
    $this->name = "Carp";
    $this->carp = new Carp();
  }
  public function eatFish() {
    echo "Carp don"t eat moss.
";
  }
  public function eatMoss() {
    $this->carp->eatMoss();
  }
}
?>

其他的地方和使用继承的适配器模式一样,这里不再赘述。

Summary

适配器模式在不修改现有代码的基础上,保留了架构。使用继承的适配器和使用组件的适配器各有利弊,继承的类冗余度/空间复杂度偏高,组件的调用栈/时间复杂度偏高,应该结合实际情况选择。

(本文出自csprojectedu.com,转载请注明出处)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/21716.html

相关文章

  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    Dionysus_go 评论0 收藏0
  • php设计模式

    摘要:我们今天也来做一个万能遥控器设计模式适配器模式将一个类的接口转换成客户希望的另外一个接口。今天要介绍的仍然是创建型设计模式的一种建造者模式。设计模式的理论知识固然重要,但 计算机程序的思维逻辑 (54) - 剖析 Collections - 设计模式 上节我们提到,类 Collections 中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了...

    vspiders 评论0 收藏0
  • PHP基础

    摘要:分别为适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。设计模式五适配器模式适配器模式将某个对象的接生成器和协程的实现在这篇文章中,作者针对那些比较难以理解的概念,以一个更为通俗的方式去讲明白。。 PHP 源码注解 PHP 的详细源码注解 PHP 字符串操作整理 一些有关字符串的常用操作。 Redis 常见七种使用场景 (PHP 实战) 这篇文章主要介绍利用 R...

    HtmlCssJs 评论0 收藏0
  • JS 设计模式 配器模式

    摘要:适配器模式是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作。适配器有种角色目标抽象角色定义客户所期待的使用接口。接口源角色需要被适配的接口。接口适配器角色把源接口转换成符合要求的目标接口的设备。 适配器模式 是指将一个接口转换成客户端希望的另外一个接口,该模式使得原本不兼容的类可以一起工作。举个例子:macbook pro有一个HDMI接口,一条HDM...

    mochixuan 评论0 收藏0
  • PHP设计模式(七)配器模式(Adapter For PHP

    摘要:适配器模式将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。如下待适配对象电子书翻页电子书打开客户端测试输出结果电子书打开电子书翻页 适配器模式:将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。 showImg(https://segmentfault.com/img/bVbi...

    silvertheo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<