Dalam artikel sebelumnya "Mari bincang tentang mod memo dalam PHP " kami memperkenalkan mod memo dalam PHP Artikel ini akan membawa anda memahami mod jambatan dalam corak reka bentuk PHP.
Mod jambatan, dalam dunia pengaturcaraan, sebenarnya sinonim dengan gabungan/pengagregatan. Kenapa awak cakap macam tu? Kami yang biasa dengan berorientasikan objek semua tahu faedah pewarisan boleh berkongsi banyak atribut dan fungsi kelas induk. Walau bagaimanapun, warisan juga membawa masalah, iaitu, gandingan yang serius. Pengubahsuaian kelas induk akan memberi kesan pada subkelas sedikit sebanyak Malah pengubahsuaian kaedah atau atribut mungkin memerlukan semua subkelas untuk mengubah suainya. Ini melanggar prinsip enkapsulasi terbuka. Bridging adalah untuk menyelesaikan masalah ini Ia menekankan penggunaan gabungan / pengagregatan untuk berkongsi beberapa kaedah yang tersedia. Saya percaya anda mesti memikirkan ciri-ciri dalam PHP Jika anda telah menggunakan ciri ini di tempat kerja, maka anda telah menggunakan mod jambatan!
Definasi GOF: Pisahkan bahagian abstrak daripada bahagian pelaksanaannya supaya bahagian tersebut boleh berubah secara bebas.
Rajah kelas GoF
Pelaksanaan kod
interface Implementor { public function OperationImp(); } class ConcreteImplementorA implements Implementor { public function OperationImp() { echo '具体实现A', PHP_EOL; } } class ConcreteImplementorB implements Implementor { public function OperationImp() { echo '具体实现B', PHP_EOL; } }
Mari kita tentukan dahulu antara muka pelaksanaan dan pelaksanaan khusus mereka, iaitu fungsi yang sebenarnya akan dilaksanakan. Ia seperti Adaptee dalam corak penyesuai.
abstract class Abstraction { protected $imp; public function SetImplementor(Implementor $imp) { $this->imp = $imp; } abstract public function Operation(); } class RefinedAbstraction extends Abstraction { public function Operation() { $this->imp->OperationImp(); } }
Tentukan antara muka kelas abstrak dan kekalkan rujukan kepada pelaksanaan. Dalam kaedah pelaksanaan kelas abstrak tertentu, kami terus memanggil kaedah operasi sebenar yang melaksanakan antara muka. Sama seperti Penyesuai dalam penyesuai.
$impA = new ConcreteImplementorA(); $impB = new ConcreteImplementorB(); $ra = new RefinedAbstraction(); $ra->SetImplementor($impA); $ra->Operation(); $ra->SetImplementor($impB); $ra->Operation();
Apabila dipanggil oleh pelanggan, kelas abstrak kami menggunakan kelas pelaksanaan yang berbeza untuk menjadikan kaedah operasi polimorfik.
Telefon mudah alih kami mempunyai model yang berbeza, dan setiap model menghasilkan aksesori yang hampir sama tetapi berbeza. Contohnya, sarung telefon bimbit, filem dan fon telinga X2, sarung telefon bimbit, filem dan fon telinga, dsb. Disebabkan isu kos, kami tidak akan menghasilkan aksesori yang sama sekali berbeza untuk setiap model telefon mudah alih. Sebaliknya, cuba gunakan aksesori universal luaran (Pelaksana), supaya setiap model telefon bimbit (Abstraction) boleh digabungkan (Bridge) dan dijual kepada pengguna. Dengan cara ini, jenama telefon bimbit kita tidak akan kehabisan pembiayaan dan ditutup terlalu awal. Nampaknya terdapat banyak kaitan antara menjalankan perniagaan dan mempelajari corak reka bentuk! !
Kod penuh: https://github.com/zhangyue0503/designpatterns-php/blob/master/18.bridge/source/bridge.php
Penghantaran SMS kami juga boleh dilaksanakan menggunakan jambatan. Katakan kita mempunyai banyak templat mesej teks, dan kemudian menggunakan pembekal mesej teks yang berbeza untuk menghantar mesej teks. Pada masa ini, kita boleh menggunakan mod jambatan untuk membentuk pelbagai kombinasi.
SMS menghantar gambar rajah kelas
Kod sumber penuh: https://github.com/zhangyue0503/designpatterns- php /blob/master/18.bridge/source/bridge-message.php
<?php interface MessageTemplate { public function GetTemplate(); } class LoginMessage implements MessageTemplate { public function GetTemplate() { echo '您的登录验证码是【AAA】,请不要泄露给他人【XXX公司】!', PHP_EOL; } } class RegisterMessage implements MessageTemplate { public function GetTemplate() { echo '您的注册验证码是【BBB】,请不要泄露给他人【XXX公司】!', PHP_EOL; } } class FindPasswordMessage implements MessageTemplate { public function GetTemplate() { echo '您的找回密码验证码是【CCC】,请不要泄露给他人【XXX公司】!', PHP_EOL; } } abstract class MessageService { protected $template; public function SetTemplate($template) { $this->template = $template; } abstract public function Send(); } class AliYunService extends MessageService { public function Send() { echo '阿里云开始发送短信:'; $this->template->GetTemplate(); } } class JiGuangService extends MessageService { public function Send() { echo '极光开始发送短信:'; $this->template->GetTemplate(); } } // 三个短信模板 $loginTemplate = new LoginMessage(); $registerTemplate = new RegisterMessage(); $findPwTemplate = new FindPasswordMessage(); // 两个短信服务商 $aliYun = new AliYunService(); $jg = new JiGuangService(); // 随意组合 // 极光发注册短信 $jg->SetTemplate($registerTemplate); $jg->Send(); // 阿里云发登录短信 $aliYun->SetTemplate($loginTemplate); $aliYun->Send(); // 阿里云发找回密码短信 $aliYun->SetTemplate($findPwTemplate); $aliYun->Send(); // 极光发登录短信 $jg->SetTemplate($loginTemplate); $jg->Send(); // ......
Penjelasan
Pengarang: Pengurus Projek Tegar
Pembelajaran yang disyorkan: "Tutorial Video PHP"
Atas ialah kandungan terperinci Perbincangan ringkas mengenai mod jambatan dalam PHP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!