تمرير الرسائل بين الكائنات - كيفية الرجوع إلى الهدف ؟

StackOverflow https://stackoverflow.com/questions/99684

  •  01-07-2019
  •  | 
  •  

سؤال

أن المهمة الأساسية في وجوه المنحى البيئة تنفيذ الطريقة على كائن.للقيام بذلك, يجب أن يكون لديك إشارة إلى الكائن الذي كنت استدعاء الأسلوب.هو الطريقة الصحيحة لوضع هذا إشارة إلى تمرير الكائن كمعلمة إلى المنشئ (أو مهيئ الأسلوب) من استدعاء كائن ؟

إذا كان الكائن foo المكالمات إلى كائن bar, ، هل من الصحيح أن نقول (في شبه رمز):

bar = new barClass()
foo = new fooClass(bar)

ماذا يحدث إذا كنت بحاجة إلى تمرير رسائل ذهابا وإيابا ؟ هل تحتاج إلى طريقة تسجيل الهدف الكائن ؟

foo = new fooClass()
bar = new barClass()

foo.register(bar)
bar.register(foo)

هل هناك نمط يتناول هذا ؟

هل كانت مفيدة؟

المحلول

عموما حقن التبعية هو الطريق للذهاب.إذا كنت تتحدث فقط عن كائنين التواصل ثم تمرير مثيل واحد في paramter إلى أخرى ، كما في المثال الأول.ويمر في منشئ تضمن الإشارة دائما صحيحة.وإلا سيكون لديك لاختبار لضمان تسجيل كان قد دعا.أيضا سوف تحتاج إلى تأكد من استدعاء تسجيل أكثر من مرة لن يكون لها آثار ضارة.

ما إذا كنت ترغب في السيطرة على الكائن الذي الكائنات الأخرى سجل الأحداث.ثم تكون مناسبة لاستخدام طريقة التسجيل ( والتي قد تضيف إلى مندوب).

انظر نمط مراقب

نصائح أخرى

حقن التبعية أطر مثل الربيع و Guice توفر حلا الدورية تبعيات في جافا باستخدام وكلاء والتي يمكن حل المتلقي من الرسالة الأولى هو الوقت المطلوب.هذه ليست قابلة للتطبيق عموما OO نمط ذلك.

حسنا, اعتمادا على مستوى الرسائل, يمكنك تنفيذ خدمة الرسائل.الكائنات الاستماع للرسائل ، أو تسجيل كما MessageListener على بعض MessageProvider.

كنت في نهاية المطاف مع الدورية تبعيات إن اثنين من الأشياء إشارات إلى بعضها البعض ، والتي أود أن تنظر سيئة في معظم الحالات.

أحد أنواع الكائنات يمكن أن يكون أحد المصانع الأخرى.عندما فو يتغوط جديد بار, اتصال بالفعل:

foo = new Foo();
bar = Foo.Poop();

function Foo::Poop()
{
    bar = new Bar(this);
    myChildren.Add(bar);
    return bar;
}

bar.SayHiToParent();
foo.SayHiToChildren();

أعتقد أن ذلك يعتمد إلى حد كبير على ما بالضبط العلاقة بين كائنين.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top