PHP Diseño Patrones Ed - modo de adaptador

Adaptador para una clase existente, pero el caso no querían sustituir a los cambios en la interfaz. El patrón decorativo como el modo, pero con diferentes fines de aplicación.
Benpian ejemplo:
Estados Unidos tensión eléctrica es de 110V, 220V China es, que desea utilizar aparatos eléctricos chinos en los Estados Unidos, no debe ser un adaptador de 110V a 220V, por lo demás aparatos eléctricos no se pueden utilizar. (Emmm, cómo leer extraño, pero no tengo pruebas)

La primera manera: Objeto adaptador

interface Target
{
    public function volt110();
    public function other();
    public function volt220();
}

/**
 * Class Adaptee 被适配者
 */
class Adaptee
{
    public function volt110()
    {
        echo '110V<br>';
    }

    public function other()
    {
        echo '我是其它操作<br>';
    }
}

/**
 * Class Adapter 适配器
 */
class Adapter implements Target
{
    private $_adaptee;

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

    public function volt110()
    {
        $this->_adaptee->volt110();
    }

    public function other()
    {
        $this->_adaptee->other();
    }

    public function volt220()
    {
        echo '220V<br>';
    }

}
$adapter = new Adapter(new Adaptee());
$adapter->volt110(); // 想用110V就用110V,该类(Adaptee)在系统已存在并大规模使用了,修改它的逻辑判断与传参,可能会导致某些地方异常。
$adapter->volt220(); // 想用220V就增加22OV,在需要增加新的同类型操作时,但处理的数据不同,增加一个接口,再用适配器类(Adapter)实现该接口。使他们为同一个接口。
$adapter->other(); // 假装有其它操作

Esto puede llamarse la misma interfaz.
No hacer esto, es necesario Adapteeconstruir una clase de 220V (fuera de clase Adapter), cuando se utiliza una vez más nueva. Ahora, antes de agregar a la nueva interfaz sólo tiene que, puede llamar a la unidad.
En general, es la nueva clase (el mismo método habría sido capaz de poner una clase) especificación de la interfaz para un nombre, las clases que han de añadirse una interfaz, llamada unificada.

La segunda manera: Adaptador de clase. Para entender mejor la afirmación anterior

interface Target2
{
    public function volt110();
    public function volt220();
}

class Adaptee2
{
    public function volt110()
    {
        echo '110V<br>';
    }

    public function other()
    {
        echo '我是其它操作<br>';
    }
}

class Adapter2 extends Adaptee2 implements Target2
{
    public function volt220()
    {
        echo '220V<br>';
    }
}

$adapter2 = new Adapter2();
$adapter2->volt110();
$adapter2->volt220();
$adapter2->other();
Publicados 112 artículos originales · ganado elogios 75 · vistas 130 000 +

Supongo que te gusta

Origin blog.csdn.net/weikaixxxxxx/article/details/90729735
Recomendado
Clasificación