Rumah >pembangunan bahagian belakang >tutorial php >Pengenalan kepada Rantaian Tanggungjawab

Pengenalan kepada Rantaian Tanggungjawab

Joseph Gordon-Levitt
Joseph Gordon-Levittasal
2025-02-17 10:15:09278semak imbas

Artikel ini menerangkan dan menunjukkan rantaian corak reka bentuk tanggungjawab.

Introduction to Chain of Responsibility

Konsep Utama

Rantaian Tanggungjawab (COR) adalah corak reka bentuk tingkah laku yang mengarahkan permintaan melalui urutan objek pemprosesan (pengendali). Ini amat berguna apabila: pengendali yang sesuai tidak diketahui terlebih dahulu, pemilihan pengendali automatik diperlukan, atau permintaan mesti mengikuti rantaian yang diprioritaskan.

COR mengintegrasikan dengan baik dengan corak lain, seperti corak komposit, membolehkan rawatan pengendali seragam dan permintaan penghantaran. Struktur fleksibelnya menggalakkan gandingan longgar dan kebolehsuaian.

Prestasi boleh dipertingkatkan menggunakan bekas perkhidmatan untuk instantiasi objek dan mekanisme caching untuk menyimpan dan menggunakan semula respons untuk permintaan yang sama.

Definisi

COR memproses permintaan dengan lulus melalui rantai objek pengendali. Permintaan mungkin dikendalikan oleh pengendali tunggal atau beberapa, bergantung kepada pelaksanaannya. Semua pengendali mengambil bahagian dalam rantai.

Contoh mudah termasuk: transaksi ATM (kemasukan pin, pengeluaran jumlah, percetakan resit) dan panggilan meja bantuan (navigasi menu, langkah berpandu).

Peserta

Komponen teras adalah:

  • Pengendali: mentakrifkan antara muka untuk permintaan pengendalian. Ini boleh menjadi kelas abstrak, secara pilihan menyediakan kaedah lalai dan tugasan pengganti.
  • Pengendali konkrit: Permintaan proses dan boleh mengemukakannya kepada pengganti.
Penambahan pilihan termasuk: objek klien yang memulakan permintaan dan menubuhkan rantai; objek permintaan; objek tindak balas; dan corak reka bentuk lain.

Gunakan kes

cor bersinar apabila:

    Pemilihan pengendali adalah automatik (mis., Pembalakan).
  • Pengendali tidak diketahui terlebih dahulu (mis., Pengendalian pengecualian).
  • Permintaan mesti mengikuti perintah keutamaan, berpotensi dinamik, (mis., Peristiwa atau perintah).

Pelaksanaan Asas (PHP)

cor sering berpasangan dengan corak komposit. Inilah contoh PHP asas:

<code class="language-php"><?php
abstract class BasicHandler {
    private $successor = null;

    public function setSuccessor(BasicHandler $handler) {
        $this->successor = $handler;
    }

    abstract public function handle($request);
}

class FirstHandler extends BasicHandler {
    public function handle($request) {
        // Process request...  Then optionally:
        if ($this->successor) {
            return $this->successor->handle($request);
        }
        return null; // Or a response
    }
}

// ... SecondHandler, ThirdHandler classes ...

$first = new FirstHandler();
$second = new SecondHandler();
$third = new ThirdHandler();

$first->setSuccessor($second);
$second->setSuccessor($third);

$result = $first->handle($request);
?></code>

Pelaksanaan Lanjutan (PHP)

Kekuatan Cor terletak pada organisasi rantaian fleksibelnya. Contoh ini menunjukkan penstrukturan semula dan penyesuaian:

<code class="language-php"><?php
abstract class AdvancedHandler {
    private $successor = null;

    final public function setSuccessor(AdvancedHandler $handler) {
        if ($this->successor === null) {
            $this->successor = $handler;
        } else {
            $this->successor->setSuccessor($handler);
        }
    }

    final public function handle($request) {
        $response = $this->process($request);
        if ($response === null && $this->successor !== null) {
            return $this->successor->handle($request);
        }
        return $response;
    }

    abstract protected function process($request);
}

class FirstHandler extends AdvancedHandler {
    protected function process($request) {
        // Process request... return null to pass to successor, or a response
    }
}

// ... SecondHandler, ThirdHandler classes ...

$first = new FirstHandler();
$second = new SecondHandler();
$third = new ThirdHandler();

$first->setSuccessor($second);
$first->setSuccessor($third); // Adds to the end of the chain

$result = $first->handle($request);
?></code>
Ini meminimumkan kaedah dalam pengendali konkrit, meningkatkan perpaduan. Penambahbaikan selanjutnya mungkin melibatkan objek atau integrasi berstruktur dengan corak lain.

Response

Konfigurasi rantai

Memisahkan konfigurasi rantai meningkatkan kejelasan kod dan pemeliharaan. Suntikan ketergantungan, berpotensi menggunakan fail konfigurasi YAML, menawarkan pendekatan yang bersih:

<code class="language-php">class Client {
    private $firstHandler;

    public function setChainOrder(array $handlers) {
        // Code to build the chain using $handlers
    }

    public function process($request) {
        return $this->firstHandler->handle($request);
    }
}</code>
Pengoptimuman prestasi

untuk aplikasi prestasi kritikal dengan pengendali yang kompleks dan permintaan yang kerap, pertimbangkan:

  • Container Service: Urus Instantiation Object untuk mengelakkan penciptaan berulang.
  • Caching: menyimpan dan menggunakan semula respons untuk permintaan yang sama menggunakan mekanisme seperti corak flyweight. Ini boleh diintegrasikan ke dalam kelas AdvancedHandler.

Kesimpulan

cor adalah corak yang kuat, walaupun membolehkan rantai rantai. Semasa mempromosikan gandingan longgar, reka bentuk yang teliti adalah penting untuk mengelakkan masalah yang berpotensi. Secara menyeluruh menganalisis masalah anda sebelum melaksanakan COR, memberi tumpuan kepada definisi pengendali, interaksi permintaan/tindak balas, dan kemunculan prestasi yang berpotensi.

Soalan Lazim (Soalan Lazim) (Ini sudah ditangani dengan baik dalam teks asal, jadi saya tidak akan mengulanginya di sini. Teks asal memberikan jawapan yang sangat baik.)

Atas ialah kandungan terperinci Pengenalan kepada Rantaian Tanggungjawab. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Sqlite 3 di luar asasArtikel seterusnya:Sqlite 3 di luar asas