Rumah pembangunan bahagian belakang tutorial php PHP面向对象进阶设计模式:委托模式使用实例

PHP面向对象进阶设计模式:委托模式使用实例

May 22, 2017 pm 02:07 PM

面向对象编程的最强大功能之一是其拥有动态特性。当今世界不断涌现出更多可用的功能、混合搭建结构以及持续发展的标准,动态代码具有了全新的含义。无论是新文件存储标准或流媒体标准,还是社会网站或某些有Internet先锋API上的新事物,Web编程总在不断地发生突变。如今在面对大量的可用选项时,处理判决的传统方式不再有效。通过将智能化对象移动到适当的位置,委托设计模式能够远离复杂的判决。

什么是委托模式?

通过分配或委托至其他对象,委托设计模式能够去除核心对象中的判决和复杂的功能性。

委托模式应用问题与解决方案

大多数PHP编程人员最初接触的几乎都是程序化的编程类型。这种编程样式极大地依赖于以条件语句为基础的流控制。面向对象的编程提供了某些不同于传统条件语句的手段,从而创建了更多态的代码流。这个功能的实现方法之一是创建基于委托设计模式的对象。

委托设计模式致力于从核心对象中去除复杂性。此时我们并不设计极大依赖于通过评估条件语句而执行特定功能性的对象,基于委托模式的对象能够将判决委托给不同的对象。委托既可以像使用中间对象处理判决树一样简单,也可以像使用动态实例化对象提供期望的功能一样复杂。

不要将委托设计模式视为条件语句的直接竞争者,这是非常重要的。相反,委托设计模式通过不需要条件语句就可以调用正确功能性的方式来帮助构成体系结构。条件语句最好驻留在实际方法中,并且在方法中完成对业务规则的处理。

委托设计模式的一个使用示例是为特定数据部分提供多种格式。假设在开放资源代码库中存在一个归档。当访问者打算下载部分源代码时,他们可以选择两种不同格式的文件。指定文件被压缩后将被发送至浏览器。在这个示例中,我打算采用zip和tgz压缩格式的文件。

当一个对象包含复杂但独立的、必须基于判决执行的功能性的若干部分时,最佳的做法是使用基于委托设计模式的对象。


UML

该UML图详细说明了一个使用委托设计模式的类设计。

1.png1.png

下面是对上图的说明:

1.基类MyObject知道会使用基于委托设计模式的对象。这个类包含私有字符字符串delegateType以及MyDelegateObject的私有实例internalDelegate。

2.setDelegateType()方法接收一个名为type的参数,这个参数被存储在delegateType字符串中。

3.createDelegateObject()方法会创建委托对象的一个实例,并且根据delegateType变量为实例命名。随后,通过将该实例指派给internalDelegate,这个方法讲其存储在内部。

4.runDelegateAction()方法负责运行internalDelegate对象的action()方法。

5.MyDelegateObject包含负责特定动作的逻辑。MyObject运行action()方法实现具体的功能。

应用场景

设计了一个cd类,类中有mp3播放模式,和mp4播放模式

改进前,使用cd类的播放模式,需要在实例化的类中去判断选择什么方式的播放模式

改进后,播放模式当做一个参数传入playList函数中,就自动能找到对应需要播放的方法。

代码:cd类,未改进之前,选择播放模式是一种痛苦的事情

使用实例:

<?php  
//委托模式-去除核心对象中的判决和复杂的功能性  
//使用委托模式之前,调用cd类,选择cd播放模式是复杂的选择过程  
class cd {  
protected $cdInfo = array();   
 
public function addSong($song) {  
       $this->cdInfo[$song] = $song;  
}  
      
public function playMp3($song) {  
        return $this->cdInfo[$song] . &#39;.mp3&#39;;  
    }  
      
    public function playMp4($song) {  
        return $this->cdInfo[$song] . &#39;.mp4&#39;;  
    }  
}  
$oldCd = new cd;  
$oldCd->addSong("1");  
$oldCd->addSong("2");  
$oldCd->addSong("3");  
$type = &#39;mp3&#39;;  
if ($type == &#39;mp3&#39;) {  
    $oldCd->playMp3();  
} else {  
    $oldCd->playMp4();  
}
Salin selepas log masuk

代码:通过委托模式,改进后的cd类

<?php  
//委托模式-去除核心对象中的判决和复杂的功能性  
//改进cd类  
class cdDelegate {  
    protected $cdInfo = array();   
      
    public function addSong($song) {  
        $this->cdInfo[$song] = $song;  
    }  
      
    public function play($type, $song) {  
        $obj = new $type;  
        return $obj->playList($this->cdInfo, $song);  
    }  
}  
  
class mp3 {  
    public function playList($list) {  
        return $list[$song];  
    }  
}  
  
class mp4 {  
    public function playList($list) {          return $list[$song];  
    }  
}  
  
$newCd = new cd;  
$newCd->addSong("1");  
$newCd->addSong("2");  
$newCd->addSong("3");  
$type = &#39;mp3&#39;;  
$oldCd->play(&#39;mp3&#39;, &#39;1&#39;); //只要传递参数就能知道需要选择何种播放模式
Salin selepas log masuk

Atas ialah kandungan terperinci PHP面向对象进阶设计模式:委托模式使用实例. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Ciri Lanjutan PHP: Amalan Terbaik dalam Pengaturcaraan Berorientasikan Objek Ciri Lanjutan PHP: Amalan Terbaik dalam Pengaturcaraan Berorientasikan Objek Jun 05, 2024 pm 09:39 PM

Amalan terbaik OOP dalam PHP termasuk konvensyen penamaan, antara muka dan kelas abstrak, pewarisan dan polimorfisme, dan suntikan kebergantungan. Kes praktikal termasuk: menggunakan mod gudang untuk mengurus data dan menggunakan mod strategi untuk melaksanakan pengisihan.

Perbezaan antara corak reka bentuk dan corak seni bina dalam rangka kerja Java Perbezaan antara corak reka bentuk dan corak seni bina dalam rangka kerja Java Jun 02, 2024 pm 12:59 PM

Dalam rangka kerja Java, perbezaan antara corak reka bentuk dan corak seni bina ialah corak reka bentuk mentakrifkan penyelesaian abstrak kepada masalah biasa dalam reka bentuk perisian, memfokuskan pada interaksi antara kelas dan objek, seperti corak kilang. Corak seni bina mentakrifkan hubungan antara struktur sistem dan modul, memfokuskan pada organisasi dan interaksi komponen sistem, seperti seni bina berlapis.

Pemahaman mendalam tentang pengaturcaraan berorientasikan objek PHP: Teknik nyahpepijat untuk pengaturcaraan berorientasikan objek Pemahaman mendalam tentang pengaturcaraan berorientasikan objek PHP: Teknik nyahpepijat untuk pengaturcaraan berorientasikan objek Jun 05, 2024 pm 08:50 PM

Dengan menguasai status objek penjejakan, menetapkan titik putus, pengecualian penjejakan dan menggunakan sambungan xdebug, anda boleh menyahpepijat kod pengaturcaraan berorientasikan objek PHP dengan berkesan. 1. Jejak status objek: Gunakan var_dump() dan print_r() untuk melihat atribut objek dan nilai kaedah. 2. Tetapkan titik putus: Tetapkan titik putus dalam persekitaran pembangunan, dan penyahpepijat akan berhenti seketika apabila pelaksanaan mencapai titik putus, menjadikannya mudah untuk menyemak status objek. 3. Pengecualian jejak: Gunakan blok try-catch dan getTraceAsString() untuk mendapatkan jejak tindanan dan mesej apabila pengecualian berlaku. 4. Gunakan penyahpepijat: Fungsi xdebug_var_dump() boleh memeriksa kandungan pembolehubah semasa pelaksanaan kod.

Analisis Corak Penghias dalam Corak Reka Bentuk Java Analisis Corak Penghias dalam Corak Reka Bentuk Java May 09, 2024 pm 03:12 PM

Corak penghias ialah corak reka bentuk struktur yang membolehkan penambahan dinamik fungsi objek tanpa mengubahsuai kelas asal. Ia dilaksanakan melalui kerjasama komponen abstrak, komponen konkrit, penghias abstrak dan penghias konkrit, dan boleh mengembangkan fungsi kelas secara fleksibel untuk memenuhi keperluan yang berubah-ubah. Dalam contoh ini, penghias susu dan mocha ditambahkan pada Espresso untuk jumlah harga $2.29, menunjukkan kuasa corak penghias dalam mengubah suai gelagat objek secara dinamik.

Penggunaan indah corak penyesuai dalam corak reka bentuk Java Penggunaan indah corak penyesuai dalam corak reka bentuk Java May 09, 2024 pm 12:54 PM

Corak Penyesuai ialah corak reka bentuk struktur yang membolehkan objek yang tidak serasi berfungsi bersama Ia menukar satu antara muka kepada yang lain supaya objek boleh berinteraksi dengan lancar. Penyesuai objek melaksanakan corak penyesuai dengan mencipta objek penyesuai yang mengandungi objek yang disesuaikan dan melaksanakan antara muka sasaran. Dalam kes praktikal, melalui mod penyesuai, pelanggan (seperti MediaPlayer) boleh memainkan media format lanjutan (seperti VLC), walaupun ia sendiri hanya menyokong format media biasa (seperti MP3).

Corak Reka Bentuk PHP: Pembangunan Dipacu Ujian dalam Amalan Corak Reka Bentuk PHP: Pembangunan Dipacu Ujian dalam Amalan Jun 03, 2024 pm 02:14 PM

TDD digunakan untuk menulis kod PHP berkualiti tinggi Langkah-langkahnya termasuk: menulis kes ujian, menerangkan fungsi yang diharapkan dan menjadikannya gagal. Tulis kod supaya hanya kes ujian lulus tanpa pengoptimuman yang berlebihan atau reka bentuk terperinci. Selepas kes ujian lulus, optimumkan dan faktorkan semula kod untuk meningkatkan kebolehbacaan, kebolehselenggaraan dan kebolehskalaan.

Aplikasi corak reka bentuk dalam rangka kerja Guice Aplikasi corak reka bentuk dalam rangka kerja Guice Jun 02, 2024 pm 10:49 PM

Rangka kerja Guice menggunakan beberapa corak reka bentuk, termasuk: Corak Singleton: memastikan kelas hanya mempunyai satu tika melalui anotasi @Singleton. Corak kaedah kilang: Cipta kaedah kilang melalui anotasi @Provides dan dapatkan contoh objek semasa suntikan pergantungan. Mod strategi: Bungkus algoritma ke dalam kelas strategi yang berbeza dan nyatakan strategi khusus melalui anotasi @Named.

Apakah kelebihan dan kekurangan menggunakan corak reka bentuk dalam rangka kerja java? Apakah kelebihan dan kekurangan menggunakan corak reka bentuk dalam rangka kerja java? Jun 01, 2024 pm 02:13 PM

Kelebihan menggunakan corak reka bentuk dalam rangka kerja Java termasuk: kebolehbacaan kod yang dipertingkatkan, kebolehselenggaraan dan kebolehskalaan. Kelemahan termasuk kerumitan, overhed prestasi dan keluk pembelajaran yang curam akibat penggunaan berlebihan. Kes praktikal: Mod proksi digunakan untuk malas memuatkan objek. Gunakan corak reka bentuk dengan bijak untuk memanfaatkan kelebihannya dan meminimumkan kelemahannya.

See all articles