ED PHPデザインパターン - アダプタモード

既存のクラス用のアダプタが、ケースには、インターフェイスの変更を交換したくありませんでした。モード等が挙げられるが、異なるアプリケーション目的に装飾模様。
Benpian例:
米国の電気の電圧は、あなたが米国に中国の電気製品を使用する場合、中国は220Vで、110Vですが、220Vに110Vアダプター、それ以外の電化製品を使用することはできませんがあるはずです。(Emmmは、どのように奇妙な、それを読むために、私は証拠を持っていません)

最初の方法:オブジェクトアダプタ

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(); // 假装有其它操作

これは、同じインターフェイスを呼び出すことができます。
これをしないでください、あなたは必要なAdaptee220Vのクラス(クラスの外を構築するためにAdapter新たに再び使用する場合、)。あなたは新しいインターフェイスに追加する前に、今、ちょうど、あなたが団結に呼び出すことができますする必要があります。
一般的には、新しいクラス(同じメソッドは、クラスを置くことができただろう)の名前のためのインタフェース仕様、クラスがインタフェース、統一された呼び出しを追加します。

第二の方法:クラスのアダプタ。より良い上記の文を理解するために

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();
公開された112元の記事 ウォン称賛75 ビュー130 000 +

おすすめ

転載: blog.csdn.net/weikaixxxxxx/article/details/90729735
おすすめ