ホームページ >バックエンド開発 >PHPチュートリアル >PHPデザインパターンのアダプターパターンを見てみましょう

PHPデザインパターンのアダプターパターンを見てみましょう

coldplay.xixi
coldplay.xixi転載
2020-06-30 17:42:342854ブラウズ

PHPデザインパターンのアダプターパターンを見てみましょう

#PHP デザイン パターン アダプター パターン

    ライフ シーンの問題の紹介:
必要な場合海外に旅行したり遊んだりするとき、今ではたくさんの電化製品がありますが、携帯電話、パソコン、カメラなど、どの電化製品もそれを動かすための電源が必要です。 。 。しかし、別の非常に明らかな問題があります。電子製品は大量の電力を消費します。電力がなくなると、再充電する必要があります。我が国では、私たちが購入する電子製品に付属する充電器は通常 220V ですが、世界は非常に広く、各国の要件 (規制)

は異なります。たとえば、米国は 120V

原則:
  1. Convert a class インターフェースが別のインターフェースに変換されるため、元のインターフェースに互換性がないクラスでも互換性が得られます。

#ユーザーはアダプターによって変換されたターゲット インターフェイス メソッドを呼び出し、アダプターは適応されたユーザーの関連するインターフェイス メソッドを呼び出します。

利点:
  1. ユーザーは適応者が見えず、分離された操作である

    アダプタパターンは構造的な設計パターンである
  1. 3種類アダプタパターンの実装方法
1.クラスアダプタ

上記のUML図によると、米国の電圧インターフェイス

UsaInterface

、アダプター クラス Adapter、中国の電圧インターフェイス Chine、ユーザー Computer が必要であることがわかります。 ここでは、中国の電圧が適応先であり、アメリカの電圧が最終出力 (ターゲット) であり、構成者です。

interface UsaInterface{
    public function outPut5V();}class China{
    private $voltage = 220;

    public function outPut220V()
    {
        return $this->voltage;
    }}class Adapter extends China implements UsaInterface{

    public function outPut5V()
    {
        // TODO: Implement outPut5V() method.
        $chinaVoltage = $this->outPut220V();

        return $chinaVoltage / 2 + 10 . "V";
    }}class Computer{
    public function index(UsaInterface $usa)
    {
        if ($usa->outPut5V() === "120V") {
            printf("可以在美国使用中国的电源插头给电脑充电了");
        } else {
            printf("不可以在美国使用中国的电源插头给电脑充电了");
        }
    }}class Client{
    public function __construct()
    {
        $adapter = new Adapter();
        $computer = new Computer();

        $computer->index($adapter);
    }}

2. オブジェクト アダプタ モード

オブジェクト アダプターは実際にはクラス アダプター モデルを調整したものであるため、アダプター クラス

Adapter

は適応されたクラスを継承しませんが、それらを組み合わせて使用​​できるようにするため、次数を増やすことができます。柔軟性が高いため、adaptee の多くのメソッドは公開されません (継承関係の代わりに関連付け関係を使用します [合成再利用原則])。同時に、継承がなければ、親クラスのメソッドの書き換えをオーバーライドする方法がありません。これは良いことでもあり、悪いことでもあると考えられます。次のように: <pre class="brush:php;toolbar:false;">class Adapter implements UsaInterface{ protected $china; public function __construct(China $china) { $this-&gt;china = $china; } public function outPut5V() { // TODO: Implement outPut5V() method. $chinaVoltage = $this-&gt;china-&gt;outPut220V(); return $chinaVoltage / 2 + 10 . &quot;V&quot;; }}</pre>
3. インターフェイス アダプター (デフォルトのアダプター モード)

インターフェイスによって提供されるすべてのメソッドを実装する必要がない場合は、最初に設計できます。インターフェイスを実装するための抽象クラス、およびインターフェイスのデフォルトの空のメソッド実装を提供します。その後、抽象クラスのサブメソッドを変更すると、要件を満たすために親クラスの特定のメソッドを選択的にオーバーライドできます(インターフェイスがそうする状況に適用されます)。すべての方法を使用する必要はありません)

関連する学習の推奨事項:
PHP プログラミングの入門から熟練度まで

以上がPHPデザインパターンのアダプターパターンを見てみましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はlearnku.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。