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(); }
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(); } }
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(); }
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; } }
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
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!