Analisis mendalam corak pemerhati dalam pengaturcaraan berorientasikan objek PHP

王林
Lepaskan: 2023-08-13 18:36:02
asal
1387 orang telah melayarinya

Analisis mendalam corak pemerhati dalam pengaturcaraan berorientasikan objek PHP

Analisis mendalam corak pemerhati dalam pengaturcaraan berorientasikan objek PHP

Corak pemerhati ialah corak reka bentuk yang biasa digunakan untuk mencapai gandingan longgar antara objek dalam sistem perisian. Idea terasnya ialah: objek (dipanggil pemerhati atau subjek) mengekalkan senarai objek (dipanggil pemerhati) yang bergantung padanya Apabila keadaan objek yang diperhatikan berubah, ia akan memberitahu semua pemerhati secara automatik. Dengan cara ini, corak pemerhati boleh merealisasikan hubungan satu-ke-banyak antara objek Apabila objek berubah, semua objek berkaitan akan dimaklumkan dan boleh bertindak balas dalam masa.

Dalam pengaturcaraan berorientasikan objek PHP yang popular, corak pemerhati digunakan secara meluas untuk melaksanakan sistem dipacu peristiwa, sistem pemesejan, sistem langganan dan penerbitan, dsb. Di bawah, kami akan menganalisis secara mendalam pelaksanaan corak pemerhati dalam pengaturcaraan berorientasikan objek PHP dan memberikan beberapa contoh kod.

Pertama, kami mentakrifkan antara muka subjek, yang mengandungi kaedah berikut:

interface Subject
{
    public function attach(Observer $observer);
    public function detach(Observer $observer);
    public function notify();
}
Salin selepas log masuk

Dalam antara muka ini, kami mentakrifkan tiga kaedah: attach digunakan untuk melanggan pemerhati, detach digunakan untuk berhenti melanggan pemerhati, dan notify digunakan untuk maklumkan kepada semua pemerhati. Seterusnya, kami melaksanakan kelas topik tertentu:

class ConcreteSubject implements Subject
{
    private $observers = [];
    private $state;

    public function attach(Observer $observer)
    {
        $this->observers[] = $observer;
    }

    public function detach(Observer $observer)
    {
        foreach ($this->observers as $key => $obs) {
            if ($obs === $observer) {
                unset($this->observers[$key]);
            }
        }
    }

    public function notify()
    {
        foreach ($this->observers as $observer) {
            $observer->update();
        }
    }

    public function getState()
    {
        return $this->state;
    }

    public function setState($state)
    {
        $this->state = $state;
        $this->notify();
    }
}
Salin selepas log masuk

Dalam kelas topik khusus ini, kami mengekalkan senarai pemerhati dan keadaan. Melalui kaedah attach, kita boleh menambah pemerhati ke senarai; melalui kaedah detach, kita boleh mengeluarkan pemerhati dari senarai melalui kaedah pemberitahuan, kita boleh memberitahu semua pemerhati. Apabila keadaan topik berubah, kami memanggil kaedah setState untuk mengemas kini keadaan dan memberitahu semua pemerhati yang melanggan topik tersebut.

Seterusnya, kami mentakrifkan antara muka Pemerhati:

interface Observer
{
    public function update();
}
Salin selepas log masuk

Dalam antara muka ini, kami mentakrifkan kemas kini kaedah, yang digunakan untuk bertindak balas apabila keadaan yang diperhatikan berubah. Seterusnya, kami melaksanakan kelas pemerhati khusus:

class ConcreteObserver implements Observer
{
    private $subject;
    private $state;

    public function __construct(Subject $subject)
    {
        $this->subject = $subject;
        $this->subject->attach($this);
    }

    public function update()
    {
        $this->state = $this->subject->getState();
        echo "Observer state updated: " . $this->state . "
";
    }

    public function getState()
    {
        return $this->state;
    }
}
Salin selepas log masuk

Dalam kelas pemerhati khusus ini, kami menambah pemerhati ke senarai pemerhati subjek melalui kaedah pembina, dan mendapatkan status objek yang diperhatikan dalam kaedah kemas kini, dan melakukan beberapa operasi tindak balas .

Akhir sekali, kami boleh menulis kod ujian untuk mengesahkan cara corak pemerhati berfungsi:

$subject = new ConcreteSubject();
$observer1 = new ConcreteObserver($subject);
$observer2 = new ConcreteObserver($subject);

$subject->setState(1); // 输出:Observer state updated: 1
$subject->setState(2); // 输出:Observer state updated: 2
Salin selepas log masuk

Dalam kod ujian di atas, kami mencipta objek subjek tertentu dan dua objek pemerhati khusus, dan menambah objek pemerhati dalam pemerhati objek subjek senarai. Kemudian, kemas kini keadaan pemerhati dicetuskan dengan menetapkan keadaan objek subjek, dan keadaan dikemas kini adalah output.

Melalui analisis dan contoh kod di atas, kami mempunyai pemahaman yang mendalam tentang pelaksanaan corak pemerhati dalam pengaturcaraan berorientasikan objek PHP. Corak pemerhati boleh membantu kami mencapai gandingan longgar antara objek dan menjadikan sistem lebih fleksibel dan berskala. Dalam pembangunan sebenar, kita boleh menggunakan corak pemerhati mengikut keperluan khusus untuk meningkatkan kualiti reka bentuk dan kecekapan pembangunan sistem perisian.

Atas ialah kandungan terperinci Analisis mendalam corak pemerhati dalam pengaturcaraan berorientasikan objek PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan