وصف وضع الديكور
ملاحظة: استخدم فئة واحدة لتعديل الكائنات الوظيفية لفئة أخرى بشكل ديناميكي قبل أو بعد ، وأضف بعض الوظائف الإضافية إليها ؛ هذا هو زخرفة وظائف كائن فئة. تتطلب الفئة الزخرفية والفئة المزينة نفس طريقة واجهة الوصول (الوظيفة). في الفئات الديناميكية الموجهة نحو الكائنات ، يتم تقييد التنفيذ بشكل عام من خلال تنفيذ الواجهة نفسها ؛ يجب أن يكون للطبقة الزخرفية إشارة إلى الفئة المزينة ، والتي يتم استخدامها لاستدعاء أساليب الفئة الزخرفية المقابلة في الفئة الزخرفية ، ثم تعديلها ؛
أمثلة على السيناريوهات:
1>. على سبيل المثال ، عندما نرتدي ملابس في حياتنا ، قميص ، سترة بدلة ، زوج من السراويل ، ربطة عنق ، وزوج من الأحذية الجلدية الجميلة ؛ كل واحد إضافي هو زخرفة للواجهة أو الجسم كله ؛
2>. على سبيل المثال ، لدينا طريقة وظيفة ضمن فئة يمكن استخدامها لكتابة سجلات ، والتي يمكن استخدامها للمستخدمين لتسجيل الدخول إلى هذه الوظيفة. ربما نحتاج إلى الحصول على معلومات المشغل الحالية قبل كتابة السجل ، أو كتابة سجل بعد تسجيل الدخول بنجاح ؛ العمليات الإضافية قبل كتابة السجل هي بشكل عام الغرض من سجلات الكتابة ؛ تعد كتابة السجل بعد تسجيل الدخول بنجاح أيضًا معلومات تشغيل عملية السجل ؛
لذلك ، يتم استخدام وضع الديكور للتنفيذ ، ويعمل الاثنان بشكل مشابه ؛ هذا هو توسع ديكور الكائن الوظيفي للديكور ، وهو في الأساس نفس النطاق الوظيفي للطريقة الأصلية ؛
رمز مصدر مثيل
1. فئة مزينة
نسخة الكود كما يلي:
دالة ارتداء () {
}
WEAR.PROTYTY.SHIRT = FUNTRIAL () {
// ارتداء قميص
console.log ('ارتداء قميص') ؛
}
2. الديكور
نسخة الكود كما يلي:
ديكور وظيفة (ارتداء) {
this.wear = ارتداء ؛
}
Decorator.Prototype.Shirt = function () {
this.wear.shirt () ؛
// بعد ارتداء قميص ، وضعت ربطة عنق مرة أخرى
}
3. كيفية الاستخدام
نسخة الكود كما يلي:
var wear = new Wear () ؛
Var Decorator = Decorator New (Wear) ؛
Decorator.Shirt () ؛
هذا يسمح بالديكور الممتد الديناميكي لكائن دالة قميص التآكل. ليس عليك أن تعرف كيف يتم تنفيذ الطريقة الزخرفية الأصلية. فقط تعرف على وظيفتها ، ثم تعرف على الوظيفة الإضافية التي نريد إضافتها إليها ؛
تعليمات أخرى
يسحب نمط الديكور حقًا الطريقة الموجهة للكائن: مبدأ الانفتاح على الامتدادات والإغلاق إلى التعديلات ؛ يتم تنفيذ جميع الطرق الوظيفية المطلوبة دون تعديل [ارتداء الطبقة المزينة] وتمديد [ديكور فئة الديكور] ؛
من السمات الرئيسية لنموذج الديكور أن إشارة الديكور إلى الديكور من أجل تحقيق الديكور غير المعدل للديكور ؛
المحاكاة: مشهد ارتداء قميص أولاً ، ثم ربطة عنق ، ثم بدلة: لا يزال الديكور أعلاه دون تغيير:
2. الديكور:
نسخة الكود كما يلي:
ديكور وظيفة (ارتداء) {
this.wear = ارتداء ؛
}
Decorator.Prototype.Shirt = function () {
this.wear.shirt () ؛ // فقط ارتداء القمصان هنا ؛
}
3. إنشاء دروس ترتدي التعادل وترتدي بدلة مماثلة لورث الفئة الفرعية للديكور
نسخة الكود كما يلي:
دائرة الديكور_tie (ديكور) {
this.decorator = ديكور ؛
}
decorator_tie.prototype.shirt = function () {
this.decorator.shirt () ؛ // ارتداء قميص
console.log ('ارتداء ربطة عنق مرة أخرى) ؛
}
دخول وظيفة decorator_western (ديكور) {
this.decorator = ديكور ؛
}
decorator_western.prototype.shirt = function () {
this.decorator.shirt () ؛
console.log ('ارتداء بدلة مرة أخرى') ؛
}
كيفية استخدام:
نسخة الكود كما يلي:
// ضع قميصك أولاً
var wear = new Wear () ؛
Var Decorator = Decorator New (Wear) ؛
//decorator.shirt () ؛
// ارتداء ربطة عنق مرة أخرى
var tie = new Decorator_tie (Decorator) ؛
//tie.shirt () ؛
// وضع بدلة مرة أخرى
var Western = New Decorator_western (tie) ؛
Western.Shirt () ؛
هذا مثال وهمي على خلع الملابس والتزيين.