美文网首页
结构性模式:适配器模式

结构性模式:适配器模式

作者: lifefruity | 来源:发表于2021-04-14 11:33 被阅读0次

适配器模式是Adapter,也称Wrapper,是指如果一个接口需要B接口,但是待传入的对象却是A接口,怎么办?
所以引出定义适配器模式是指:定义一个类,将一个已经存在的类,转换成目标接口所期望的行为形式。

适配器模式有2种。一种适配对象,一种适配class(其实就是继承,但是有不好的点,就是会有多余的方法出来,比如220v的是不需要的,当前就应该只有5v的)

什么时候需要用适配器模式?只要记住一点。当你有动机修改一个已经投入生产的接口,这时候就可以考虑试用适配器模式。适配器模式是用于解决接口不兼容问题有效方法。

已220v电压转换为5v为例

  1. 对象适配器模式
/*
【适配器模式中主要角色】
目标(Target)角色:定义客户端使用的与特定领域相关的接口,这也就是我们所期待得到的
源(Adaptee)角色:需要进行适配的接口
适配器(Adapter)角色:对Adaptee的接口与Target接口进行适配;适配器是本模式的核心,适配器把源接口转换成目标接口,此角色为具体类。
*/


//1. 对象适配器模式
/**
 * 目标角色
 */
interface Target {
    public function output5v();
}
 
/**
 * 源角色
 */
class Adaptee {
 
    /**
     * 源类含有的方法
     */
    public function output220v() {
        return 220;
    }
}
 
/**
 * 类适配器角色
 */
class Adapter implements Target {
    private $_adaptee;
 
    public function __construct(Adaptee $adaptee) {
        $this->_adaptee = $adaptee;
    }
 
    /**
     * 委派调用Adaptee的sampleMethod1方法
     */
    public function output5v() {
        $origin = $this->_adaptee->output220v();
        echo "原始电压是" .$origin. '当前是5v' . PHP_EOL;
    }
 
}
 

class Client {
    public static function main() {
        $adaptee = new Adaptee();
        $adapter = new Adapter($adaptee);//传入了一个不兼容的对象
        $adapter->output5v();
    }
}
Client::main();
  1. 类适配器模式(不推荐,把220v方法也暴露了)
<?php 

/**
 * 目标角色
 */
interface Target {
    public function output5v();
}
 
/**
 * 源角色
 */
class Adaptee {
 
    /**
     * 源类含有的方法
     */
    public function output220v() {
        return 220;
    }
}
 
/**
 * 类适配器角色
 */
class Adapter extends Adaptee implements Target {
    private $_adaptee;
 
    public function __construct(Adaptee $adaptee) {
        $this->_adaptee = $adaptee;
    }
 
    /**
     * 委派调用Adaptee的sampleMethod1方法
     */
    public function output5v() {
        $origin = $this->_adaptee->output220v();
        echo "原始电压是" .$origin. '当前是5v' . PHP_EOL;
    }
 
}
 

class Client {
    public static function main() {
        $adaptee = new Adaptee();
        $adapter = new Adapter($adaptee);//传入了一个不兼容的对象
        $adapter->output5v();
    }
}
Client::main();

相关文章

  • 常用开源框架中设计模式使用分析- 适配器模式(Adapter P

    十、适配器模式(Adapter Pattern) 10.1 介绍 适配器模式属于结构性模式,它为两个不同接口之间互...

  • 设计模式分类

    创建型模式->5种: 常用的 结构性模式->7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式...

  • java设计模式-适配器模式

    适配器模式,属于结构性模式,更加关心的是代码的结构和复用,而不是对象的创建。 适配器模式:别名Wrapper,为了...

  • 设计模式[6]-适配器模式-Adapter Pattern

    1. 适配器模式 适配器模式(Adapter Pattern)是结构性设计模式,其目的是协调不兼容的结构,把一个类...

  • 设计模式简介

    分类 创建型模式:单例模式、工厂方法模式、抽象工厂模式、创建者模式、原型模式。 结构性模式:适配器模式、桥接模式、...

  • PHP 《16 个 PHP 设计模式详解》实验报告

    创建型模式简单工厂模式(静态工厂方法模式)工厂方法模式抽象工厂模式(Kit模式)单例模式 结构性模式适配器模式桥接...

  • python设计模式4适配器模式

    结构性设计模式提出了一种创建新功能的对象的组合方式。 适配器模式是一种结构性设计模式,它帮助我们使两个不兼容的接口...

  • 适配器模式

    概念   适配器模式是一种结构性模式,一般用于不兼容的情况出现时,比如笔记本电脑的电源适配器,就是转换电压的。代码...

  • 结构性模式----适配器模式

    适配器是应用场景:将一个新接口适配旧接口,通过增加一个新的适配器类来解决接口不兼容问题,使得原本没有任何关联的类可...

  • 结构性模式:适配器模式

    适配器模式是Adapter,也称Wrapper,是指如果一个接口需要B接口,但是待传入的对象却是A接口,怎么办?所...

网友评论

      本文标题:结构性模式:适配器模式

      本文链接:https://www.haomeiwen.com/subject/pdyklltx.html