必威体育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();
    }
}

必威体育 1

2.类适配器

和目标适配器模式不同之是,类适配器模式是采用持续关系并接受Adaptee类,而无是行使委派关系并接受Adaptee类。

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

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

必威体育 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示例
**类适配器使用的是持续

优点:
  • 双重好的复用性
  • 再也好之扩展性
<?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设计模式之适配器模式原理与用法解析

Leave a Comment.