cari
Rumahpembangunan bahagian belakangtutorial phpCorak Penghias: Melancarkan Kuasa Corak Reka Bentuk

Corak Penghias: Melancarkan Kuasa Corak Reka Bentuk

Terdahulu dalam siri ini, kami meneroka corak reka bentuk fasad dan penyesuai dalam siri ini. Menggunakan Facade, kami boleh memudahkan sistem yang besar dan dengan melaksanakan penyesuai kami boleh kekal selamat apabila menggunakan API dan kelas luaran. Sekarang kami akan memperkenalkan corak reka bentuk penghias, yang juga termasuk dalam kategori corak struktur.

Apabila kita hanya ingin memberikan beberapa tanggungjawab tambahan kepada kelas asas, kita boleh menggunakan corak penghias. Corak reka bentuk ini adalah alternatif yang bagus untuk mensubkelaskan fungsi, melanjutkan fungsi dan mempunyai beberapa kelebihan tambahan.

Soalan

Jika anda keliru dan berfikir bahawa kita boleh mencapai kefungsian yang sama dengan mensubkelaskan fungsi juga, maka izinkan saya menunjukkan kepada anda beberapa contoh kod yang akan mengosongkan kekeliruan anda dan membuatkan anda menyukai corak penghias.

Saya akan memberikan contoh kelas yang bertanggungjawab menjana kandungan e-mel. Dalam blok kod seterusnya, seperti yang anda lihat, kelas ini menjana kandungan e-mel dengan baik tanpa sebarang pengubahsuaian.

class eMailBody {
    private $header = 'This is email header';
	private $footer = 'This is email Footer';
	public $body = '';

	public function loadBody() {
		$this->body .= "This is Main Email body.<br />";
	}
}

Kami tahu Krismas akan tiba, jadi andaikan saya ingin mengucapkan salam kepada pembaca saya dalam e-mel surat berita saya yang seterusnya. Jadi saya perlu menambah mesej dalam badan e-mel dengan imej yang kelihatan baik.

Untuk ini, saya boleh mengedit terus dalam kelas e-mel saya, tetapi saya benar-benar tidak mahu berbuat demikian. Jadi saya boleh melaksanakan warisan untuk mencapai kesan yang sama. Saya mencipta subkelas berasingan bagi kelas badan e-mel utama:

class christmasEmail extends eMailBody {
    public function loadBody() {
		parent::loadBody();
		$this->body .= "Added Content for Xmas<br />";
	}
}

$christmasEmail = new christmasEmail();
$christmasEmail->loadBody();
echo $christmasEmail->body;

Jadi saya menyelesaikan kod saya dan selepas beberapa hari saya ingin menghantar e-mel dengan ucapan selamat tahun baru. Kita boleh menggunakan pendekatan yang sama seperti Krismas.

class newYearEmail extends eMailBody {
    public function loadBody() {
		parent::loadBody();
		$this->body .= "Added Content for New Year<br />";
	}
}

$newYearEmail = new newYearEmail();
$newYearEmail->loadBody();
echo $newYearEmail->body;

Semuanya berjalan lancar tanpa sebarang masalah. Sekarang, katakan saya terlupa untuk menyambut pelawat saya pada dua majlis ini (Krismas dan Tahun Baru) dan saya ingin menghantar kedua-dua ucapan dalam satu e-mel tanpa mengubah suai sebarang kod dalam kelas asas.

Fikiran anda segera dipenuhi dengan soalan berikut: Adakah subkelas dan warisan membantu di sini? Saya memihak untuk melakukan ini, tetapi kita perlu menggunakan kod tambahan/tidak perlu untuk mencapai ini. Kita boleh menggunakan ciri untuk mencapai sesuatu yang serupa dengan pewarisan berbilang.

Penyelesaian

Masalah yang kita bincangkan di bahagian sebelumnya boleh diselesaikan dengan melaksanakan corak penghias.

Menurut Wikipedia:

Corak Penghias (juga dikenali sebagai Wrapper, tatanama alternatif yang dikongsi dengan corak Penyesuai) ialah corak reka bentuk yang membenarkan penambahan statik atau dinamik gelagat pada objek tunggal tanpa menjejaskan gelagat objek lain. Kelas yang sama.

Dalam bahagian sebelumnya, kita telah melihat bahawa kita boleh melanjutkan kefungsian/kelakuan menggunakan subkelas, tetapi apabila ia datang untuk menambah berbilang fungsi/tingkah laku, ia menjadi bertele-tele dan kompleks. Di sinilah kita harus menggunakan corak penghias.

Antaramuka

interface eMailBody {
    public function loadBody();
}

Ini adalah antara muka mudah yang digunakan untuk memastikan kelas tertentu mesti melaksanakan kaedah yang diperlukan.

Kategori e-mel utama

class eMail implements eMailBody {
    public function loadBody() {
		echo "This is Main Email body.<br />";
	} 
}

Ini ialah kelas utama yang menjana badan lalai e-mel, saya biasanya menggunakannya untuk menghantar e-mel. Walau bagaimanapun, apa yang saya perlukan ialah mengubah suai kandungan badan berdasarkan keadaan tertentu tetapi tidak menukar kelas e-mel utama.

Master Penghias

abstract class emailBodyDecorator implements eMailBody {
    	
	protected $emailBody;
	
	public function __construct(eMailBody $emailBody) {
		$this->emailBody = $emailBody;
	}
	
	abstract public function loadBody();
	
} 

Ini ialah kelas penghias utama kami, ia memegang rujukan kepada kelas e-mel utama kami dan mengubah tingkah lakunya mengikut keperluan. Di sini kami mentakrifkan kaedah abstrak, loadBody, yang penghias kanak-kanak perlu laksanakan untuk mengubah tingkah laku.

Penghias Kanak-kanak

class christmasEmailBody extends emailBodyDecorator {
    	
	public function loadBody() {
		
		echo 'This is Extra Content for Christmas<br />';
		$this->emailBody->loadBody();
		
	}
	
}

class newYearEmailBody extends emailBodyDecorator {

	public function loadBody() {
		
		echo 'This is Extra Content for New Year.<br />';
		$this->emailBody->loadBody();
		
	}

}

Di sini kami telah mencipta dua subkelas penghias utama yang sebenarnya melakukan perubahan tingkah laku pada kelas e-mel utama kami.

Pasang semuanya

Kami telah mencipta semua elemen yang diperlukan. Apa yang perlu kami lakukan ialah menggunakan kod kami dan nikmati.

interface eMailBody {
    public function loadBody();
}

class eMail implements eMailBody {
	public function loadBody() {
		echo "This is Main Email body.<br />";
	} 
}

abstract class emailBodyDecorator implements eMailBody {
	
	protected $emailBody;
	
	public function __construct(eMailBody $emailBody) {
		$this->emailBody = $emailBody;
	}
	
	abstract public function loadBody();
	
} 

class christmasEmailBody extends emailBodyDecorator {
	
	public function loadBody() {
		
		echo 'This is Extra Content for Christmas<br />';
		$this->emailBody->loadBody();
		
	}
	
}

class newYearEmailBody extends emailBodyDecorator {

	public function loadBody() {
		
		echo 'This is Extra Content for New Year.<br />';
		$this->emailBody->loadBody();
		
	}

}

Kini kami akan menggunakan kelas penghias ini dalam pelbagai cara mengikut keperluan:

/*
 *  Normal Email
 */

$email = new eMail();
$email->loadBody();

// Output
This is Main Email body.


/*
 *  Email with Xmas Greetings
 */

$email = new eMail();
$email = new christmasEmailBody($email);
$email->loadBody();

// Output
This is Extra Content for Christmas
This is Main Email body.

/*
 *  Email with New Year Greetings
 */

$email = new eMail();
$email = new newYearEmailBody($email);
$email->loadBody();


// Output
This is Extra Content for New Year.
This is Main Email body.

/*
 *  Email with Xmas and New Year Greetings
 */

$email = new eMail();
$email = new christmasEmailBody($email);
$email = new newYearEmailBody($email);
$email->loadBody();

// Output
This is Extra Content for New Year.
This is Extra Content for Christmas
This is Main Email body.

Kami dapat melihat bahawa kini kami telah menukar badan e-mel tanpa mengubahsuai kelas e-mel utama.

Kesimpulan

Setiap aplikasi yang kami ada memerlukan beberapa jenis perubahan dan/atau penambahbaikan secara berkala. Jadi dalam kes ini, kami boleh melaksanakan corak reka bentuk penghias yang akhirnya akan meningkatkan kualiti kod dan menjadikan kod kami lebih berskala.

Saya cuba sedaya upaya untuk menerangkan corak penghias kepada anda, tetapi jika anda mempunyai sebarang komen atau soalan lain, sila tambahkannya pada suapan di bawah.

Atas ialah kandungan terperinci Corak Penghias: Melancarkan Kuasa Corak Reka Bentuk. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan
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
Suntikan Ketergantungan di PHP: Menghindari Perangkap BiasaSuntikan Ketergantungan di PHP: Menghindari Perangkap BiasaMay 16, 2025 am 12:17 AM

DependencyInjection (DI) inphpenhancescodeflexabilityandtestabilitybydecouplingDependencyCreationFromusage.toImplementDieffectively: 1) UseIcontainersjudiciousytoavoavoidover-engineering.2) mengelakkan constructoLoadbylimitingdendenchreeorfour.3)

Cara mempercepat laman web PHP anda: Penalaan PrestasiCara mempercepat laman web PHP anda: Penalaan PrestasiMay 16, 2025 am 12:12 AM

Toimproveyourphpwebsite'sperformance, usetheseStrategies: 1) pelaksanaanPodeCachingWithopcachetospeedupscriptinterpretation.2) OptimisedataBasequeriesqueriesSelectingOnlyNessaryFields.3)

Menghantar e -mel massa dengan PHP: Adakah mungkin?Menghantar e -mel massa dengan PHP: Adakah mungkin?May 16, 2025 am 12:10 AM

Ya, itispossibletosendmassemailswithphp.1) uselibrarieshpmailerorswiftmailoreforefficientemailsending.2)

Apakah tujuan suntikan ketergantungan dalam PHP?Apakah tujuan suntikan ketergantungan dalam PHP?May 16, 2025 am 12:10 AM

DependencyInjection (DI) inphpisadesignpatternTheevesinversionofControl (IOC) ByallowingdependencyestobeNectedIntoClasses, Enhancingmodularity, Testability, danFlexibility.DideDecouplassClassSesesesesSesesSesesSesesSesesSesesSesesspeciflementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglementations, MakeCodemorAglemors, Maklumat

Bagaimana cara menghantar e -mel menggunakan php?Bagaimana cara menghantar e -mel menggunakan php?May 16, 2025 am 12:03 AM

Cara terbaik untuk menghantar e -mel menggunakan PHP termasuk: 1. Gunakan fungsi mel () php untuk penghantaran asas; 2. Gunakan perpustakaan phpmailer untuk menghantar mel lebih kompleks HTML; 3. Gunakan perkhidmatan mel transaksional seperti SendGrid untuk meningkatkan keupayaan kebolehpercayaan dan analisis. Dengan kaedah ini, anda boleh memastikan bahawa e -mel bukan sahaja mencapai peti masuk, tetapi juga menarik penerima.

Bagaimana cara mengira jumlah elemen dalam pelbagai PHP multidimensional?Bagaimana cara mengira jumlah elemen dalam pelbagai PHP multidimensional?May 15, 2025 pm 09:00 PM

Mengira jumlah elemen dalam array multidimensi PHP boleh dilakukan dengan menggunakan kaedah rekursif atau berulang. 1. Kaedah rekursif dikira dengan melintasi array dan rekursif memproses susunan bersarang. 2. Kaedah berulang menggunakan timbunan untuk mensimulasikan rekursi untuk mengelakkan masalah kedalaman. 3. Fungsi Array_Walk_Recursive juga boleh dilaksanakan, tetapi ia memerlukan pengiraan manual.

Apakah ciri-ciri gelung sementara di PHP?Apakah ciri-ciri gelung sementara di PHP?May 15, 2025 pm 08:57 PM

Dalam PHP, ciri-ciri gelung do-sementara adalah untuk memastikan bahawa badan gelung dilaksanakan sekurang-kurangnya sekali, dan kemudian memutuskan sama ada untuk meneruskan gelung berdasarkan syarat-syarat. 1) Ia melaksanakan badan gelung sebelum pemeriksaan bersyarat, sesuai untuk senario di mana operasi perlu dilakukan sekurang -kurangnya sekali, seperti pengesahan input pengguna dan sistem menu. 2) Walau bagaimanapun, sintaks gelung do-sementara boleh menyebabkan kekeliruan di kalangan pemula dan boleh menambah overhead prestasi yang tidak perlu.

Bagaimana Hash Strings dalam PHP?Bagaimana Hash Strings dalam PHP?May 15, 2025 pm 08:54 PM

String hashing yang cekap dalam PHP boleh menggunakan kaedah berikut: 1. Gunakan fungsi MD5 untuk hashing cepat, tetapi tidak sesuai untuk penyimpanan kata laluan. 2. Gunakan fungsi SHA256 untuk meningkatkan keselamatan. 3. Gunakan fungsi password_hash untuk memproses kata laluan untuk menyediakan keselamatan dan kemudahan tertinggi.

See all articles

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!

Artikel Panas

Nordhold: Sistem Fusion, dijelaskan
1 bulan yang laluBy尊渡假赌尊渡假赌尊渡假赌
Mandragora: Whispers of the Witch Tree - Cara Membuka Kunci Cangkuk Bergelut
4 minggu yang laluBy尊渡假赌尊渡假赌尊渡假赌

Alat panas

SublimeText3 Linux versi baharu

SublimeText3 Linux versi baharu

SublimeText3 Linux versi terkini

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

PhpStorm versi Mac

PhpStorm versi Mac

Alat pembangunan bersepadu PHP profesional terkini (2018.2.1).

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat

Pelayar Peperiksaan Selamat ialah persekitaran pelayar selamat untuk mengambil peperiksaan dalam talian dengan selamat. Perisian ini menukar mana-mana komputer menjadi stesen kerja yang selamat. Ia mengawal akses kepada mana-mana utiliti dan menghalang pelajar daripada menggunakan sumber yang tidak dibenarkan.