Rumah >pembangunan bahagian belakang >tutorial php >Perbincangan ringkas mengenai mod jambatan dalam PHP

Perbincangan ringkas mengenai mod jambatan dalam PHP

青灯夜游
青灯夜游ke hadapan
2021-07-21 19:53:232910semak imbas

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.

Perbincangan ringkas mengenai mod jambatan dalam 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!

Rajah dan penjelasan kelas Gof

Definasi GOF: Pisahkan bahagian abstrak daripada bahagian pelaksanaannya supaya bahagian tersebut boleh berubah secara bebas.

Rajah kelas GoF

Perbincangan ringkas mengenai mod jambatan dalam PHP

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.

  • Dalam penjelasan kod sumber, kami akan mendapati bahawa mod ini hampir sama dengan mod penyesuai. Walau bagaimanapun, tujuan penyesuai adalah untuk membantu dua kelas yang tidak berkaitan bekerjasama untuk mencapai kerja penukaran pertengahan. Tujuan penyambungan adalah untuk memisahkan gandingan warisan tingkah laku kaedah, menambah, mengubah suai dan memanggil gelagat secara mudah, supaya antara muka abstrak dan bahagian pelaksanaan boleh ditukar secara bebas
  • Untuk membenarkan antara muka abstrak dan bahagian pelaksanaan untuk diubah secara bebas Ini bermakna selagi rujukan kepada antara muka pelaksanaan dikekalkan, kelas pelaksanaan khusus antara muka pelaksanaan kami boleh menjadi kelas yang sama sekali berbeza dengan fungsi yang berbeza dan boleh diubah sesuka hati. Biarkan pelaksanaan menentukan apa itu.
  • Kelebihan mod jambatan: berkongsi antara muka dan bahagian pelaksanaannya, meningkatkan kebolehskalaan dan menjadikan butiran pelaksanaan telus kepada pelanggan
  • Masalah utama yang diselesaikan oleh mod jambatan adalah disebabkan oleh pertumbuhan berterusan pewarisan Masalah gandingan yang ketat
  • Gabungan dan pengagregatan: Pengagregatan ialah hubungan yang lemah, A boleh mengandungi B, tetapi B bukan sebahagian daripada A adalah gabungan yang kuat, A mengandungi B, B juga sebahagian daripada A , hubungan antara keseluruhan dan bahagian

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

Contoh

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

Perbincangan ringkas mengenai mod jambatan dalam PHP

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 &#39;您的登录验证码是【AAA】,请不要泄露给他人【XXX公司】!&#39;, PHP_EOL;
    }
}
class RegisterMessage implements MessageTemplate
{
    public function GetTemplate()
    {
        echo &#39;您的注册验证码是【BBB】,请不要泄露给他人【XXX公司】!&#39;, PHP_EOL;
    }
}
class FindPasswordMessage implements MessageTemplate
{
    public function GetTemplate()
    {
        echo &#39;您的找回密码验证码是【CCC】,请不要泄露给他人【XXX公司】!&#39;, 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 &#39;阿里云开始发送短信:&#39;;
        $this->template->GetTemplate();
    }
}

class JiGuangService extends MessageService
{
    public function Send()
    {
        echo &#39;极光开始发送短信:&#39;;
        $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

  • Ini ialah mod pengagregatan . Templat bukan sebahagian daripada menghantar mesej teks templat mesej teks yang berbeza untuk melaksanakan pelbagai templat Hantar dengan pantas
  • Apabila anda tidak pasti sama ada ia adalah perhubungan, lebih disyorkan untuk menggunakan kaedah reka bentuk gabungan/agregasi seperti mod jambatan ditentukan bahawa hubungan kelas semasa ialah-a, Kemudian jangan teragak-agak untuk menggunakan warisan
Alamat asal: https://juejin.cn/post/6844903986655395848

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!

Kenyataan:
Artikel ini dikembalikan pada:juejin.cn. Jika ada pelanggaran, sila hubungi admin@php.cn Padam