يمكن لنمط الديكور إضافة إمكانيات إلى الكائنات الموجودة ديناميكيًا. أدناه، سأستخدم مثالًا بسيطًا لتوضيح كيفية استخدام نمط الديكور في البرنامج.
1. نمط الديكور
لنفترض للحظة أنك تبحث عن صديقة. هناك العديد من الفتيات من بلدان مختلفة، مثل الولايات المتحدة والصين واليابان وفرنسا وغيرها. كل واحدة منهن لديها شخصيات واهتمامات مختلفة إذا كنت بحاجة إلى محاكاة مثل هذا الموقف في البرنامج، فافترض أن كل فتاة هي ل Java، سيكون هناك الآلاف من الفئات، مما سيؤدي إلى توسيع الفئات، وستكون قابلية التوسع لمثل هذا التصميم ضعيفة نسبيًا. لأنه إذا كنا بحاجة إلى فتاة جديدة، فنحن بحاجة إلى إنشاء فئة Java جديدة، والتي تنتهك في الواقع مبدأ OCP (مفتوح للتوسيع، مغلق للتعديل) الذي يجب اتباعه في تطوير البرنامج.
لنقم بإنشاء تصميم آخر حيث تصبح كل شخصية أو هواية بمثابة زخرفة يمكن إضافتها ديناميكيًا إلى جسم كل فتاة.
2. هيكل الرسم البياني للفئة
3. نموذج التعليمات البرمجية لنمط الديكور
Girl.java
انسخ رمز الكود كما يلي:
فتاة الطبقة العامة مجردة {
وصف السلسلة = "لا يوجد خاص"؛
سلسلة عامة getDescription(){
وصف الإرجاع؛
}
}
AmericanGirl.java
انسخ رمز الكود كما يلي:
الطبقة العامة AmericanGirl تمتد الفتاة {
publicAmericanGirl() {
وصف = "+أمريكي";
}
}
EuropeanGirl.java
انسخ رمز الكود كما يلي:
الطبقة العامة EuropeanGirl تمتد الفتاة {
فتاة أوروبية عامة (){
description = "+أوروبي";
}
}
GirlDecorator.java
انسخ رمز الكود كما يلي:
فئة مجردة عامة GirlDecorator تمتد فتاة {
سلسلة مجردة عامة getDescription();
}
Science.java
انسخ رمز الكود كما يلي:
يمتد علم الطبقة العامة GirlDecorator {
فتاة خاصة؛
العلوم العامة(بنت بنت){
this.girl = فتاة;
}
@تجاوز
سلسلة عامة getDescription() {
إرجاع this.girl.getDescription() + "+Like Science";
}
الفراغ العام caltulateStuff () {
System.out.println("الحساب العلمي!");
}
}
جافا
انسخ رمز الكود كما يلي:
الفن العام يمتد إلى GirlDecorator {
فتاة خاصة؛
الفن العام(بنت بنت){
this.girl = فتاة;
}
@تجاوز
سلسلة عامة getDescription() {
إرجاع this.girl.getDescription() + "+Like Art";
}
رسم الفراغ العام () {
System.out.println("ارسم الصور!");
}
}
main.java
انسخ رمز الكود كما يلي:
الطبقة العامة الرئيسية {
public static void main(String[] args) {
// فتاة أمريكية عادية
Girl g1 = new AmericanGirl();
System.out.println(g1.getDescription());
// أولئك الذين يحبون العلم
العلم g2 = العلم الجديد(g1);
System.out.println(g2.getDescription());
// أولئك الذين يحبون الفن
الفن g3 = الفن الجديد (g2)؛
System.out.println(g3.getDescription());
}
}
4. تطبيق نمط الديكور في JDK
يعد الإدخال والإخراج في Java المثال الأكثر شيوعًا لاستخدام نمط الديكور.
ما يلي هو مثال بسيط لتزيين كائن InputStreamReader من خلال كائن BufferedReader:
انسخ رمز الكود كما يلي:
BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
// System.in هو كائن InputStream
(ينتهي النص الكامل)