memperkenalkan
Model strategi mendefinisikan keluarga algoritma dan merangkumnya secara terpisah sehingga mereka dapat saling menggantikan. Model ini memungkinkan perubahan dalam algoritma untuk tidak mempengaruhi pelanggan menggunakan algoritma.
teks
Sebelum memahami model kebijakan, mari kita ambil contoh terlebih dahulu. Secara umum, jika kita ingin memverifikasi legitimasi data, kita sering menilai sesuai dengan pernyataan sapuan, tetapi ini membawa beberapa masalah. Pertama -tama, jika kita meningkatkan permintaan, kita harus memodifikasi kode ini lagi untuk meningkatkan logika, dan itu akan menjadi semakin rumit ketika melakukan tes unit. Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
validator = {
Validasi: fungsi (nilai, ketik) {
switch (type) {
kasus 'isNonEmpty':
{
Kembali Benar; // Hasil verifikasi yang tidak tepat
}
case 'iSnumber':
{
Kembali Benar; // Hasil verifikasi nomor
merusak;
}
kasus 'isalphanum':
{
Kembali Benar; // Hasil Verifikasi Alphanum
}
bawaan:
{
Kembali Benar;
}
}
}
};
// tes
alert (validator.validate ("123", "isNonEmpty"));
Jadi bagaimana cara menghindari masalah dalam kode di atas? Menurut pola kebijakan, kita dapat merangkum kode kerja yang sama ke dalam kelas yang berbeda secara terpisah, dan kemudian menanganinya melalui kelas pemrosesan kebijakan terpadu. Oke, pertama -tama kita mendefinisikan kelas pemrosesan kebijakan, kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var validator = {
// semua tempat di mana semua kelas pemrosesan aturan validasi dapat disimpan akan didefinisikan secara terpisah nanti
Jenis: {},
// pesan kesalahan yang sesuai dengan jenis verifikasi
Pesan: [],
// Tentu saja, jenis verifikasi yang perlu digunakan
config: {},
// Metode verifikasi publik yang terpapar
// parameter yang dilewatkan adalah key => nilai pasangan
Validasi: fungsi (data) {
var I, msg, type, checker, result_ok;
// Bersihkan semua pesan kesalahan
this.messages = [];
untuk (i in data) {
if (data.hasownproperty (i)) {
type = this.config [i]; // Periksa apakah ada aturan validasi berdasarkan kunci
checker = this.types [type]; // Dapatkan kelas verifikasi untuk aturan verifikasi
if (! type) {
melanjutkan; // Jika aturan verifikasi tidak ada, itu tidak akan diproses
}
if (! checker) {// Jika kelas aturan verifikasi tidak ada, pengecualian dilemparkan
melemparkan {
Nama: "ValidationError",
Pesan: "Tidak ada pawang untuk memvalidasi tipe" + tipe
};
}
result_ok = checker.validate (data [i]); // Verifikasi menggunakan kelas verifikasi tunggal yang ditemukan
if (! result_ok) {
msg = "nilai tidak valid untuk *" + i + " *," + checker.instructions;
this.messages.push (msg);
}
}
}
kembalikan this.haserrors ();
},
// penolong
haserrors: function () {
kembalikan this.messages.length! == 0;
}
};
Maka sisanya adalah untuk menentukan berbagai kelas verifikasi yang disimpan dalam jenis. Mari memberi Anda beberapa contoh di sini:
Salinan kode adalah sebagai berikut:
// Pastikan bahwa nilai yang diberikan tidak kosong
validator.types.isnonEmpty = {
Validasi: function (value) {
nilai pengembalian! == "";
},
Instruksi: "Nilai yang berlalu tidak bisa kosong"
};
// Pastikan bahwa nilai yang diberikan adalah angka
validator.types.isnumber = {
Validasi: function (value) {
Return! Isnan (nilai);
},
Instruksi: "Nilai yang dilewati hanya bisa menjadi nomor hukum, misalnya: 1, 3.14 atau 2010"
};
// Pastikan bahwa nilai yang diberikan hanyalah surat atau angka
validator.types.isalphanum = {
Validasi: function (value) {
return!/[^a-z0-9] /i.test (nilai);
},
Instruksi: "Nilai yang dilewatkan hanya dapat melindungi huruf dan angka dan tidak dapat berisi karakter khusus"
};
Saat menggunakannya, pertama -tama kita perlu menentukan set data yang perlu diverifikasi, dan kemudian kita perlu menentukan jenis aturan yang perlu diverifikasi untuk setiap data. Kodenya adalah sebagai berikut:
Salinan kode adalah sebagai berikut:
var data = {
first_name: "tom",
last_name: "xu",
Usia: "Tidak Diketahui",
Nama pengguna: "Tomxu"
};
validator.config = {
first_name: 'isNonempty',
Umur: 'ISNumber',
Nama pengguna: 'isalphanum'
};
Akhirnya, kode untuk mendapatkan hasil verifikasi sederhana:
Salinan kode adalah sebagai berikut:
validator.validate (data);
if (validator.haserrors ()) {
console.log (validator.messages.join ("/n"));
}
Meringkaskan
Pola strategi mendefinisikan serangkaian algoritma. Secara konseptual, semua algoritma ini melakukan hal yang sama, tetapi implementasinya berbeda. Mereka dapat memanggil semua metode dengan cara yang sama, mengurangi kopling antara berbagai kelas algoritma dan kelas algoritma yang digunakan.
Dari level lain, mendefinisikan kelas algoritma secara terpisah juga memfasilitasi pengujian unit, karena dapat diuji secara terpisah melalui algoritma Anda sendiri.
Dalam praktiknya, tidak hanya algoritma yang dapat dienkapsulasi, tetapi juga hampir semua jenis aturan. Penting untuk menerapkan aturan bisnis yang berbeda pada waktu yang berbeda selama proses analisis, sehingga Anda dapat mempertimbangkan bahwa model kebijakan diperlukan untuk menangani berbagai perubahan.