java适配器模式。学习php设计模式 php实现适配器模式。

其他设计模式
java单例模式
java建造者模式
java策略模式
java代理模式
java观察者模式
java适配器模式
java外观模式

适配器模式:以一个近乎的接口转换成为客户愿意的另外一个接口。Adapter模式使得本由接口不般配而非能够共同坐班的那些看似可一并干活。
适配器模式来星星点点种植:接近的适配器模式及对象的适配器模式

一、意图
用一个好像的接口转换成为客户愿意之另外一个接口。Adapter模式使得本是因为接口不匹配而未能够一起坐班的那么此类可以齐干活
第二、适配器模式结构图

1.目标适配器

目标适配器结构图.png

Target(这是客户所期的接口。目标可以是具体的或者抽象的近乎,也足以是接口)代码如下:

public interface Target {
    public void request();
}

Adaptee(需要适配的类)代码如下:

public class Adaptee {
    public void specificRequest(){
    }
}

Adapter(通过在里头包装一个Adaptee对象,把源对象接口转换成为靶子接口)代码如下:

public class Adapter implements Target{
    private Adaptee adaptee=new Adaptee();
    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

客户端代码如下:

public class TestAdapter {
    public static void main(String[] args) {
        Target target = new Adapter();
        target.request();
    }
}

betway必威官网 1

2.类适配器

同对象适配器模式不同之是,类适配器模式是采取持续关系并接受Adaptee类,而未是应用委派关系并接受Adaptee类。

不过待变更目标适配器的Adapter代码,
Target和Adaptee保持一致,Adapter代码如下:

public class Adapter extends Adaptee implements Target{
    @Override
    public void request() {
        this.specificRequest();
    }
}

betway必威官网 2

3.实例讲解

火箭队比赛,教练暂停时为中国球员Zhou分配进攻和防卫任务。但是Zhou刚去NBA,没学过英语,听不知底教练分配的职责,所以这时候要翻译,此时翻就相当给适配器。

NBA球员抽象类,都起攻(attack)和防卫(defense)的点子。

public interface Player {
    public void attack();
    public void defense();
}

Zhou类(Adaptee),听不明白attack和defense,只了解进攻与防御

public class Zhou {
    public void 进攻() {
        System.out.print("进攻");
    }

    public void 防守() {
        System.out.print("防守");
    }
}

翻译类(Adapter)此处采用靶适配器

public class Translator implements Player{
    private Zhou zhou=new Zhou();
    @Override
    public void attack() {
       zhou.进攻();
    }

    @Override
    public void defense() {
        zhou.防守();
    }
}

客户端调用:打印出攻击防守

public class TestAdapter {
    public static void main(String[] args) {
        Player player=new Translator();
        player.attack();
        player.defense();
    }
}

假若上述要改成为看似适配器,只需要变更Translator类

public class Translator extends Zhou implements Player{
    @Override
    public void attack() {
       this.进攻();
    }

    @Override
    public void defense() {
        this.防守();
    }
}

其三、适配器模式面临要角色
目标(Target)角色:定义客户端采用的跟特定领域相关的接口,这也就是是我们所幸收获的
源(Adaptee)角色:需要展开适配的接口
适配器(Adapter)角色:对Adaptee的接口和Target接口进行适配;适配器是按照模式的骨干,适配器把源接口转换成靶子接口,此角色吧具体类
季、适配器模式适用场景 1、你想利用一个曾是的类似,而它的接口不相符您的急需
2、你想创立一个好复用的类似,该类可以同其它非相干的好像还是不足预见的切近协同工作
3、你想采取一个既是的子类,但是非容许针对各个一个且开展子类化以配合它们的接口。对象适配器可以适配它的父类接口(仅限于对象适配器)
五、类适配器模式以及目标适配器
**
仿佛适配器:Adapter与Adaptee是累关系
1、用一个具体的Adapter类和Target进行匹配。结果是当我们纪念使一个匹一个类似以及拥有它的子类时,类Adapter将不能够独当一面工作
2、使得Adapter可以重定义Adaptee的片段行为,因为Adapter是Adaptee的一个子集
3、仅仅引入一个对象,并不需要额外的指针以间接获adaptee
靶适配器:Adapter与Adaptee是委托关系
1、允许一个Adapter与大多只Adaptee同时工作。Adapter也堪等效不行受持有的Adaptee添加功能
2、使用重定义Adaptee的一言一行比较艰苦
适配器模式及其他模式
桥模式(bridge模式):桥梁模式以及目标适配器类似,但是桥梁模式的视角不同:桥梁模式目的是拿接口部分以及贯彻有分离,从而对它得以较容易吧针锋相对独立的加以改变。而目标适配器模式则象征反一个早已来目标的接口
装饰器模式(decorator模式):装饰模式增强了外对象的效果而还要还要休改变它的接口。因此装饰模式对利用的透明性比适配器更好。
六、类适配器模式PHP示例
**类适配器使用的凡延续

优点:
  • 再次好之复用性
  • 重新好的betway必威官网扩展性
<?php
/**
 * 目标角色
 */
interface Target {

  /**
   * 源类也有的方法1
   */
  public function sampleMethod1();

  /**
   * 源类没有的方法2
   */
  public function sampleMethod2();
}

/**
 * 源角色
 */
class Adaptee {

  /**
   * 源类含有的方法
   */
  public function sampleMethod1() {
    echo 'Adaptee sampleMethod1 <br />';
  }
}

/**
 * 类适配器角色
 */
class Adapter extends Adaptee implements Target {

  /**
   * 源类中没有sampleMethod2方法,在此补充
   */
  public function sampleMethod2() {
    echo 'Adapter sampleMethod2 <br />';
  }

}

class Client {

  /**
   * Main program.
   */
  public static function main() {
    $adapter = new Adapter();
    $adapter->sampleMethod1();
    $adapter->sampleMethod2();

  }

}

Client::main();
?>
缺点:
  • 过多的施用适配器,会受系统颇混乱,不爱整体进行把握。

七、对象适配器模式PHP示例
对象适配器使用的凡委任

何时选用适配器模式:
  • 比方你想如果动一个都在的类,但是其的接口不相符您的需要,这种情景好应用适配器模式,来管早已有的实现转移成你得的接口。
  • 若果您想创立一个足复用的好像,这个看似或和部分不匹配的近乎并坐班,这种状况可利用适配器模式,到下要什么就适配什么。
  • 要是您想用一些一度存在的子类,但是不容许针对各一个子类都开展适配,这种状态可以选用对象适配器,直接适配这些子类的父类就可以了。
<?php
/**
 * 目标角色
 */
interface Target {

  /**
   * 源类也有的方法1
   */
  public function sampleMethod1();

  /**
   * 源类没有的方法2
   */
  public function sampleMethod2();
}

/**
 * 源角色
 */
class Adaptee {

  /**
   * 源类含有的方法
   */
  public function sampleMethod1() {
    echo 'Adaptee sampleMethod1 <br />';
  }
}

/**
 * 类适配器角色
 */
class Adapter implements Target {

  private $_adaptee;

  public function __construct(Adaptee $adaptee) {
    $this->_adaptee = $adaptee;
  }

  /**
   * 委派调用Adaptee的sampleMethod1方法
   */
  public function sampleMethod1() {
    $this->_adaptee->sampleMethod1();
  }

  /**
   * 源类中没有sampleMethod2方法,在此补充
   */
  public function sampleMethod2() {
    echo 'Adapter sampleMethod2 <br />';
  }

}

class Client {

  /**
   * Main program.
   */
  public static function main() {
    $adaptee = new Adaptee();
    $adapter = new Adapter($adaptee);
    $adapter->sampleMethod1();
    $adapter->sampleMethod2();

  }

}

Client::main();
?>

如上就是是运php实现适配器模式之代码,还有部分关于适配器模式之概念区分,希望对大家之上抱有助。

若或许感兴趣之稿子:

  • php设计模式
    Adapter(适配器模式)
  • 浅析php适配器模式(Adapter)
  • php适配器模式介绍
  • PHP设计模式之适配器模式代码实例
  • PHP实现之粗略适配器模式示例
  • PHP设计模式之适配器模式定义与用法详解
  • PHP设计模式之原型设计模式原理同用法解析
  • PHP设计模式之单例模式原理及落实方式分析
  • PHP设计模式之工厂方法设计模式实例分析
  • PHP设计模式之适配器模式原理及用法解析

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注