Jadual Kandungan
Soalan
Antaramuka
Rumah pembangunan bahagian belakang tutorial php Corak strategi: salah satu corak reka bentuk

Corak strategi: salah satu corak reka bentuk

Aug 28, 2023 pm 05:53 PM
corak reka bentuk corak strategi kata kunci

Corak strategi: salah satu corak reka bentuk

Setakat ini, kami telah merangkumi tiga corak rekaan dalam siri ini. Kami mentakrifkan empat kategori corak reka bentuk yang berbeza. Dalam artikel ini, saya akan menerangkan Corak Reka Bentuk Strategik, yang tergolong dalam Corak Reka Bentuk Tingkah Laku.

Anda mungkin mempunyai soalan: Bilakah anda perlu menggunakan corak reka bentuk ini? Saya akan katakan apabila kami mempunyai pelbagai kaedah (algoritma) untuk melaksanakan operasi yang sama dan kami mahu aplikasi memilih kaedah tertentu berdasarkan parameter yang anda miliki. Mod ini juga dipanggil mod strategi.

Contoh yang sangat mudah daripada artikel ini ialah fungsi pengisihan. Sebagai contoh, kami mempunyai berbilang algoritma untuk menyusun tatasusunan, tetapi bergantung pada bilangan elemen tatasusunan, kami harus memilih algoritma yang hendak digunakan untuk mendapatkan prestasi terbaik.

Mod ini juga dipanggil mod strategi.

Soalan

Saya akan memberikan contoh laman web e-dagang yang menyepadukan berbilang gerbang pembayaran. Walaupun tapak web mempunyai berbilang gerbang pembayaran, atas permintaan, mereka tidak semuanya dipaparkan di bahagian hadapan. Sebaliknya, gerbang pembayaran yang sesuai perlu dipilih dengan segera berdasarkan jumlah troli.

Sebagai contoh mudah, jika nilai troli kurang daripada $500, pembayaran hendaklah diproses menggunakan piawaian PayPal, tetapi jika jumlahnya ialah $500 atau lebih, ia perlu diproses menggunakan butiran kad kredit yang disimpan (dengan andaian butiran telah disimpan ).

Jika strategi yang betul tidak dilaksanakan, kod kami akan kelihatan seperti ini:

Pertama, kami akan menyediakan kelas utama untuk pembayaran melalui Paypal dan pembayaran melalui kad kredit, yang akan ditambah di bawah.

// Class to pay using Credit Card
class payByCC {

    private $ccNum = '';
	private $ccType = '';
	private $cvvNum = '';
	private $ccExpMonth = '';
	private $ccExpYear = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using Credit Card";
	}
	
}

// Class to pay using PayPal
class payByPayPal {

	private $payPalEmail = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using PayPal";
	}

}

// This code needs to be repeated every place where ever needed.
$amount  = 5000;
if($amount >= 500) {
	$pay = new payByCC();
	$pay->pay($amount);
} else {
	$pay = new payByPayPal();
	$pay->pay($amount);
}
Salin selepas log masuk

Di sini, anda mungkin mengatakan bahawa kami perlu meletakkan pernyataan bersyarat untuk menjadikan kod kami berfungsi dengan betul. Bayangkan berapa banyak perubahan yang perlu anda lakukan apabila kami perlu membuat perubahan baharu pada logik itu atau anda menemui pepijat dalam logik itu. Kita perlu menambah patch pada semua tempat di mana kod ini digunakan.

Penyelesaian

Kami akan melaksanakan keperluan yang sama tetapi menggunakan corak Strategi, yang membolehkan kami menjadikan kod kami lebih jelas, lebih mudah difahami dan boleh dikembangkan.

Antaramuka

Pertama, kami akan melaksanakan antara muka yang akan digunakan oleh semua kelas gerbang pembayaran yang berbeza. Akhirnya, ini adalah strategi kami.

interface payStrategy {
    public function pay($amount);
}

class payByCC implements payStrategy {
	
	
	private $ccNum = '';
	private $ccType = '';
	private $cvvNum = '';
	private $ccExpMonth = '';
	private $ccExpYear = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using Credit Card";
	}
	
}

class payByPayPal implements payStrategy {

	private $payPalEmail = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using PayPal";
	}

}
Salin selepas log masuk

Seterusnya kami akan mencipta kelas utama kami, yang boleh menggunakan strategi yang berbeza daripada yang telah kami laksanakan setakat ini.

class shoppingCart {
    	
	public $amount = 0;
	
	public function __construct($amount = 0) {
		$this->amount = $amount;
	}
	
	public function getAmount() {
		return $this->amount;
	}
	
	public function setAmount($amount = 0) {
		$this->amount = $amount;
	}

	public function payAmount() {
		if($this->amount >= 500) {
			$payment = new payByCC();
		} else {
			$payment = new payByPayPal();
		}
		
		$payment->pay($this->amount);
		
	}
}
Salin selepas log masuk

Di sini kita dapat melihat bahawa pemuatan bersyarat kaedah pembayaran kami dilakukan dalam kaedah payAmount. Mari kita simpulkan semuanya dan lihat cara menggunakannya dengan lebih lanjut. payAmount 方法中完成的。让我们将所有内容包装在一起,看看如何进一步使用它。

interface payStrategy {
    public function pay($amount);
}

class payByCC implements payStrategy {
	
	private $ccNum = '';
	private $ccType = '';
	private $cvvNum = '';
	private $ccExpMonth = '';
	private $ccExpYear = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using Credit Card";
	}
	
}

class payByPayPal implements payStrategy {

	private $payPalEmail = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using PayPal";
	}

}

class shoppingCart {
	
	public $amount = 0;
	
	public function __construct($amount = 0) {
		$this->amount = $amount;
	}
	
	public function getAmount() {
		return $this->amount;
	}
	
	public function setAmount($amount = 0) {
		$this->amount = $amount;
	}

	public function payAmount() {
		if($this->amount >= 500) {
			$payment = new payByCC();
		} else {
			$payment = new payByPayPal();
		}
		
		$payment->pay($this->amount);
	}
}

$cart = new shoppingCart(499);
$cart->payAmount();

// Output
Paying 499 using PayPal

$cart = new shoppingCart(501);
$cart->payAmount();

//Output 
Paying 501 using Credit Card
Salin selepas log masuk

我们可以看到支付网关的翻转对于应用程序来说并不透明。根据参数,它有适当的支付网关可用于处理交易。

添加新策略

如果在后期用户需要添加具有不同逻辑的新策略(此处为新支付网关),在这种情况下会非常简单。假设我们要添加一个新的支付网关 Moneybooker,并希望在购物车金额超过 500 美元但低于 1,000 美元时处理资金。

我们需要做的就是创建一个新的策略类来实现我们的接口,我们就可以开始了。

class payByMB implements payStrategy {

    private $mbEmail = '';
	
	public function pay($amount = 0) {
		echo "Paying ". $amount. " using Money Booker";
	}

}
Salin selepas log masuk

我们现在已经准备好了新的策略类,我们需要更改的是主要的 payAmount 方法。需要修改如下:

public function payAmount() {
    
	if($this->amount > 500 && $this->amount < 1000) {
		$payment = new payByMB();
	} else if($this->amount >= 500) {
		$payment = new payByCC();
	} else {
		$payment = new payByPayPal();
	}
	
	$payment->pay($this->amount);
}
Salin selepas log masuk

在这里您可以看到我们仅在 payAmount rrreee

Kami dapat melihat bahawa peralihan gerbang pembayaran tidak telus kepada aplikasi. Bergantung pada parameter, ia mempunyai gerbang pembayaran yang sesuai tersedia untuk memproses transaksi.

Tambah strategi baharu

Jika pada peringkat kemudian pengguna perlu menambah strategi baharu dengan logik yang berbeza (di sini gerbang pembayaran baharu), ia akan menjadi sangat mudah dalam kes ini. Katakan kami ingin menambah gerbang pembayaran baharu, Moneybooker, dan ingin memproses dana apabila jumlah troli melebihi $500 tetapi jatuh di bawah $1,000.

Apa yang perlu kami lakukan ialah mencipta kelas strategi baharu yang melaksanakan antara muka kami dan kami bersedia untuk melakukannya.

rrreee

Kami kini mempunyai kelas strategi baharu kami yang sedia, yang perlu kami ubah ialah kaedah payAmount utama. Perlu diubah suai seperti berikut: 🎜 rrreee 🎜Di sini anda dapat melihat bahawa kami hanya membuat perubahan dalam kaedah payAmount, bukan dalam kod pelanggan yang memanggil kaedah tersebut. 🎜 🎜Kesimpulan🎜🎜 🎜 🎜Jadi untuk membuat kesimpulan, apabila kita mempunyai pelbagai cara untuk melaksanakan tugas yang sama (dalam bahasa perisian, apabila kita mempunyai berbilang algoritma untuk melaksanakan operasi yang sama), kita harus mempertimbangkan untuk melaksanakan corak Strategi. 🎜 🎜Dengan menggunakan mod ini, kami boleh menambah/mengalih keluar algoritma secara bebas memandangkan penukaran algoritma ini tidak telus kepada aplikasi. 🎜 🎜Saya telah mencuba yang terbaik untuk memberikan contoh asas tetapi berguna untuk menunjukkan Corak Reka Bentuk Strategi, tetapi jika anda mempunyai ulasan atau soalan tambahan, sila tambahkannya pada suapan di bawah. 🎜

Atas ialah kandungan terperinci Corak strategi: salah satu corak reka bentuk. 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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

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.

Apakah kes aplikasi praktikal corak strategi dalam rangka kerja java? Apakah kes aplikasi praktikal corak strategi dalam rangka kerja java? Jun 05, 2024 pm 08:44 PM

Corak strategi dalam rangka kerja Java digunakan untuk menukar gelagat kelas secara dinamik termasuk: Rangka kerja Spring: pengesahan data dan pengurusan cache Rangka kerja JakartaEE: pengurusan transaksi dan suntikan pergantungan rangka kerja JSF: penukar dan pengesah, pengurusan kitaran hayat tindak balas.

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).

Analisis kes praktikal corak reka bentuk PHP Analisis kes praktikal corak reka bentuk PHP May 08, 2024 am 08:09 AM

1. Corak kilang: Asingkan penciptaan objek dan logik perniagaan, dan cipta objek jenis tertentu melalui kelas kilang. 2. Corak pemerhati: membenarkan objek subjek memberitahu objek pemerhati tentang perubahan keadaan mereka, mencapai gandingan longgar dan corak pemerhati.

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.

Bagaimana corak reka bentuk menangani cabaran penyelenggaraan kod Bagaimana corak reka bentuk menangani cabaran penyelenggaraan kod May 09, 2024 pm 12:45 PM

Corak reka bentuk menyelesaikan cabaran penyelenggaraan kod dengan menyediakan penyelesaian yang boleh digunakan semula dan boleh diperluas: Corak Pemerhati: Membenarkan objek melanggan acara dan menerima pemberitahuan apabila ia berlaku. Corak Kilang: Menyediakan cara terpusat untuk mencipta objek tanpa bergantung pada kelas konkrit. Corak Singleton: memastikan bahawa kelas hanya mempunyai satu contoh, yang digunakan untuk mencipta objek yang boleh diakses secara global.

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