هذا هو تنفيذ مباشر (افتراضي) لنمط المحول .
=> تستخدم بشكل متكرر!
=> يجب أن يكون من السهل جدًا إضافته ...
=> التأثير المتوقع ضخم.
عرض:
@Adapter
_إنشاء فئة داخلية للواجهة / الفئة المشروحة ، والتي تحتوي على جميع عمليات تنفيذ الطرق المجردة ، بحيث تقوم كل طريقة بإرجاع قيمة افتراضية لنوع الإرجاع المعلن ._
ضع في اعتبارك الإعداد التالي:
public interface SomeIntegers {
public int do_int();
public Integer do_Integer();
}
public interface SomeLongs {
public long do_long();
public Long do_Long();
}
public interface SomeFloats {
public float do_float();
public Float do_Float();
}
...
...
...
public abstract class SomeNumbers implements SomeIntegers, SomeLongs, SomeFloats, ... {
public abstract void do_nothing();
}
ثم...
فانيلا جافا:
public abstract class SomeThings extends SomeNumber {
public abstract String do_String();
public static abstract class Adapter {
public abstract int do_int() {
return 0;
}
public abstract Integer do_Integer() {
return null;
}
public abstract long do_long() {
return 0L;
}
public abstract Long do_Long() {
return null;
}
public abstract float do_float() {
return 0f;
}
public abstract Float do_Float() {
return null;
}
...
...
...
public abstract void do_nothing() {
return;
}
public abstract String do_String() {
return null;
}
}
}
مع لومبوك:
<strong i="24">@Adapter</strong>
public abstract class SomeThings extends SomeNumber {
public abstract String do_String();
}
بعض الاختلافات (للتحكم بسمات التعليق التوضيحي المقترح):
null
لأنواع الغلاف البدائي ( Integer
، Long
، انظر المثال أعلاه)@Adapter(primitiveWrapperReturns=PrimitiveWrapperReturns.NULL)
- افتراضي@Adapter(primitiveWrapperReturns=PrimitiveWrapperReturns.DEFAULT)
UnsupportedOperationException
بدلاً من إرجاع الافتراضي@Adapter(throw=false)
- افتراضي@Adapter(throw=true)
أفضل أن أراه في شكل أبسط بكثير. ضع في اعتبارك وجود الواجهة التالية:
public interface MyStuff {
public void doSomething();
public int calculateSomething();
public Float calculateSomethingPrecisely();
}
عندما تريد فقط تنفيذ طريقة واحدة doSomething()
مع Vanilla Java ، سيكون لديك:
public class MyStuffImpl implements MyStuff {
public void doSomething() {
//my code goes here
}
public int calculateSomething() {return 0;} //ignored
public Float calculateSomethingPrecisely() {return 0f;} //ignored
}
ولكن في شكل أبسط مع لومبوك يمكن أن يبدو كما يلي:
<strong i="13">@Adapter</strong>
public class MyStuffImpl implements MyStuff {
public void doSomething() {
//my code goes here
}
}
بالإضافة إلى كل التكوينات الإضافية التي اقترحتها مثل المرتجعات الافتراضية.
في المثال الخاص بي ، كنت أحاول توضيح المقدار الضخم من رمز لوحة الغلاية الذي تم توفيره بسبب التعليق التوضيحي المقترح @Adapter
. أعتقد أنه مثال جيد ، لأنه ، بشكل أساسي ، يقول: أضف العديد من الواجهات ، والطرق ، ... - مع التعليق التوضيحي @Adapter
- لن تضطر إلى إضافة سطر واحد من التعليمات البرمجية.
tomekbielaszewski - أعتقد أن مثالك جيد وبسيط. إنه يوضح نقطة أخرى: إذا اختار مبرمج تنفيذ إحدى طرق الواجهة ، فإنه يتجاوز وظيفة @Adapter
المقترحة لهذه الطريقة المعينة. بطريقة أنيقة وبديهية.
أي تقدم؟
التعليق الأكثر فائدة
في المثال الخاص بي ، كنت أحاول توضيح المقدار الضخم من رمز لوحة الغلاية الذي تم توفيره بسبب التعليق التوضيحي المقترح
@Adapter
. أعتقد أنه مثال جيد ، لأنه ، بشكل أساسي ، يقول: أضف العديد من الواجهات ، والطرق ، ... - مع التعليق التوضيحي@Adapter
- لن تضطر إلى إضافة سطر واحد من التعليمات البرمجية.tomekbielaszewski - أعتقد أن مثالك جيد وبسيط. إنه يوضح نقطة أخرى: إذا اختار مبرمج تنفيذ إحدى طرق الواجهة ، فإنه يتجاوز وظيفة
@Adapter
المقترحة لهذه الطريقة المعينة. بطريقة أنيقة وبديهية.