يسمح نمط الديكور بإضافة وظائف جديدة إلى كائن موجود دون تغيير بنيته. ينتمي هذا النوع من نمط التصميم إلى النمط الهيكلي ، وهو مجموعة من الفئات الموجودة.
ينشئ هذا النمط فئة زخرفية لالتفاف الفئة الأصلية ويوفر وظائف إضافية مع الحفاظ على سلامة توقيع طريقة الفصل.
نوضح استخدام وضع الديكور من خلال المثال التالي. من بينها ، سنقوم بتزيين شكل بألوان مختلفة دون تغيير فئة الشكل.
ينجز
سنقوم بإنشاء واجهة شكل وفئة كيان تنفذ واجهة الشكل. ثم نقوم بإنشاء مجموعة من الفئة الزخرفية المجردة التي تنفذ واجهة الشكل وتستخدم كائن الشكل كمتغير مثيله.
RedShapedEcorator هي فئة كيان تنفذ appedecorator.
DecoratorPatterndemo ، يستخدم فصلنا التجريبي RedshapedEcorator لتزيين الكائنات.
الخطوة 1
إنشاء واجهة.
الشكل
شكل الواجهة العامة {void draw () ؛}الخطوة 2
إنشاء فئة كيان تنفذ الواجهة.
rectangle.java
يطبق مستطيل الفئة العامة الشكل {Override public void draw () {system.out.println ("الشكل: strengle") ؛ }} circle.javapublic class circle تنفذ شكل {Override public void draw () {system.out.println ("الشكل: Circle") ؛ }}الخطوة 3
إنشاء فئة زخرفية مجردة تنفذ واجهة الشكل.
appedecorator.java
يطبق الفئة المجردة المجردة الشكل شكل {شكل محمي مزخرف ؛ appedecorator العامة (الشكل المزخرف) {this.decoratedShape = DecoratedShape ؛ } public void draw () {docentatedshape.draw () ؛ }}الخطوة 4
يخلق فئة ديكور كيان يمتد من فئة LapeDeCorator.
redshapedecorator.java
الطبقة العامة RedShapedEcorator يمتد ShapedEcorator {public RedshapedEcorator (الشكل المزخرف) {super (decoratedshape) ؛ } Override public void draw () {docentatedshape.draw () ؛ setRedBorder (DoctatedShape) ؛ } private void setRedBorder (الشكل المزخرف) {system.out.println ("اللون الحدود: أحمر") ؛ }}الخطوة 5
استخدم RedShapedEcorator لتزيين الكائنات.
Decoratorpatterndemo.java
DecoratorPatterNdemo {public static void main (string [] args) {شكل دائرة = New Circle () ؛ شكل redcircle = جديد RedShapedEcorator (New Circle ()) ؛ RedRectangle = جديد RedShapedEcorator (مستطيل جديد ()) ؛ System.out.println ("دائرة مع الحدود العادية") ؛ Circle.Draw () ؛ System.out.println ("/ncircle of Red Border") ؛ redcircle.draw () ؛ System.out.println ("/nrectangle of Red Border") ؛ redrectangle.draw () ؛ }}الخطوة 6
تحقق من الإخراج.
دائرة مع الحدود العادية: circlecircle من الحدود الحمراء: CircleBorder اللون: RedRectlich من الحدود الحمراء: RectangleBorder Color: Red
شكرا لك على القراءة ، آمل أن تساعدك. شكرا لك على دعمك لهذا الموقع!