يقدم
يحدد نموذج الإستراتيجية عائلة الخوارزمية ويغلفها بشكل منفصل حتى يتمكنوا من استبدال بعضهم البعض. يتيح هذا النموذج تغييرات في الخوارزمية لعدم التأثير على العملاء باستخدام الخوارزمية.
نص
قبل فهم نموذج السياسة ، دعنا أولاً نأخذ مثالاً. بشكل عام ، إذا أردنا التحقق من شرعية البيانات ، فغالبًا ما نحكم وفقًا لبيان Sweep ، لكن هذا يجلب العديد من المشكلات. بادئ ذي بدء ، إذا قمنا بزيادة الطلب ، فيجب علينا تعديل هذا الرمز مرة أخرى لزيادة المنطق ، وسيصبح أكثر تعقيدًا عند إجراء اختبارات الوحدة. الرمز كما يلي:
نسخة الكود كما يلي:
المدقق = {
التحقق من صحة: الوظيفة (القيمة ، اكتب) {
التبديل (اكتب) {
حالة "isnonempty":
{
العودة صحيح. // نتيجة التحقق غير الفارغة
}
قضية 'isnumber':
{
العودة صحيح. // نتيجة التحقق من الرقم
استراحة؛
}
حالة "isalphanum":
{
العودة صحيح. // نتيجة التحقق من ألفانوم
}
تقصير:
{
العودة صحيح.
}
}
}
} ؛
// امتحان
ALERT (Valitator.validate ("123" ، "isNonEmpty") ؛
إذن كيف تتجنب المشكلات في الكود أعلاه؟ وفقًا لنمط السياسة ، يمكننا أن نغلف نفس رمز العمل في فئات مختلفة بشكل منفصل ، ثم التعامل معها من خلال فئة معالجة السياسات الموحدة. حسنًا ، نحدد أولاً فئة معالجة السياسات ، والرمز كما يلي:
نسخة الكود كما يلي:
Var Validator = {
// جميع الأماكن التي يمكن فيها تخزين جميع فئات معالجة قواعد التحقق من الصحة
الأنواع: {} ،
// رسالة الخطأ المقابلة لنوع التحقق
رسائل: []،
// بالطبع ، نوع التحقق الذي يجب استخدامه
التكوين: {} ،
// طريقة التحقق العامة المكشوفة
// المعلمة التي تم تمريرها هي المفتاح => زوج القيمة
التحقق من صحة: وظيفة (البيانات) {
var i ، msg ، type ، checker ، result_ok ؛
// مسح جميع رسائل الخطأ
this.messages = [] ؛
ل (أنا في البيانات) {
if (data.hasownproperty (i)) {
اكتب = this.config [i] ؛ // تحقق مما إذا كانت هناك قاعدة التحقق من الصحة بناءً على المفتاح
checker = this.types [type] ؛ // احصل على فئة التحقق لقاعدة التحقق
إذا (! اكتب) {
يكمل؛ // إذا كانت قاعدة التحقق غير موجودة ، فلن تتم معالجتها
}
إذا (! Checker) {// إذا لم يكن هناك فئة قاعدة التحقق ، يتم طرح استثناء
يرمي {
الاسم: "ValuideerRor" ،
الرسالة: "لا معالج للتحقق من صحة" + نوع
} ؛
}
result_ok = checker.validate (البيانات [i]) ؛ // تحقق من استخدام فئة تحقق واحدة
if (! result_ok) {
msg = "قيمة غير صالحة لـ *" + i + " *،" + checker.instructions ؛
this.messages.push (msg) ؛
}
}
}
إرجاع this.haserrors () ؛
} ،
// المساعد
haserrors: function () {
إرجاع this.messages.length! == 0 ؛
}
} ؛
ثم الباقي هو تحديد فئات التحقق المختلفة المخزنة في الأنواع. لنقدم لك بعض الأمثلة هنا:
نسخة الكود كما يلي:
// تحقق من أن القيمة المحددة ليست فارغة
adadator.types.isnonempty = {
التحقق من صحة: الوظيفة (القيمة) {
قيمة الإرجاع! == "" ؛
} ،
التعليمات: "لا يمكن أن تكون القيمة التي تم تمريرها فارغة"
} ؛
// تحقق من أن القيمة المحددة هي رقم
adadator.types.isnumber = {
التحقق من صحة: الوظيفة (القيمة) {
إرجاع! isnan (القيمة) ؛
} ،
التعليمات: "يمكن أن تكون القيمة التي تم تمريرها فقط رقمًا قانونيًا ، على سبيل المثال: 1 ، 3.14 أو 2010"
} ؛
// تحقق من أن القيمة المحددة هي مجرد رسالة أو رقم
adadator.types.isalphanum = {
التحقق من صحة: الوظيفة (القيمة) {
إرجاع!/[^a-z0-9] /i.test (القيمة) ؛
} ،
التعليمات: "القيمة التي تم تمريرها يمكن أن تحمي فقط الحروف والأرقام ولا يمكن أن تحتوي على أحرف خاصة"
} ؛
عند استخدامه ، نحتاج أولاً إلى تحديد مجموعة البيانات التي يجب التحقق منها ، ثم نحتاج إلى تحديد نوع القاعدة الذي يحتاج إلى التحقق من كل بيانات. الرمز كما يلي:
نسخة الكود كما يلي:
بيانات var = {
first_name: "توم" ،
last_name: "Xu" ،
العمر: "غير معروف" ،
اسم المستخدم: "Tomxu"
} ؛
Valitator.Config = {
first_name: 'isnonempty' ،
العمر: 'isnumber' ،
اسم المستخدم: 'isalphanum'
} ؛
أخيرًا ، الرمز المطلوب الحصول على نتيجة التحقق بسيطة:
نسخة الكود كما يلي:
Valitator.validate (Data) ؛
if (Valitator.haserrors ()) {
console.log (adadator.messages.join ("/n")) ؛
}
لخص
يحدد نمط الإستراتيجية سلسلة من الخوارزميات. من الناحية المفاهيمية ، فإن كل هذه الخوارزميات تفعل الشيء نفسه ، لكن التنفيذ مختلف. يمكنهم استدعاء جميع الطرق بنفس الطريقة ، مما يقلل من الاقتران بين فئات الخوارزمية المختلفة وفئات الخوارزمية المستخدمة.
من مستوى آخر ، فإن تحديد فئة الخوارزمية بشكل منفصل يسهل أيضًا اختبار الوحدة ، لأنه يمكن اختباره بشكل منفصل من خلال الخوارزمية الخاصة بك.
في الممارسة العملية ، لا يمكن تغليف الخوارزميات فحسب ، ولكن أيضًا أي نوع من القواعد تقريبًا. من الضروري تطبيق قواعد العمل المختلفة في أوقات مختلفة أثناء عملية التحليل ، بحيث يمكنك التفكير في أن نموذج السياسة ضروري للتعامل مع التغييرات المختلفة.