পর্যবেক্ষক প্যাটার্নের তুলনায় ডেলিগেট প্যাটার্নের সুবিধা কী কী?


9

ইন প্রতিনিধি প্যাটার্ন , শুধুমাত্র এক বস্তু সরাসরি অন্য বস্তুর ঘটনা শুনতে পারেন। ইন পর্যবেক্ষক প্যাটার্ন , বস্তু যে কোন সংখ্যার একটি নির্দিষ্ট বস্তুর ঘটনা শুনতে পারেন। কোনও শ্রেণীর নকশা করার সময় যা ইভেন্টের অন্যান্য বস্তু (গুলি) অবহিত করতে হবে, আপনি কেন কখনও পর্যবেক্ষক প্যাটার্নের উপর প্রতিনিধি প্যাটার্নটি ব্যবহার করবেন? আমি পর্যবেক্ষক নিদর্শনটিকে আরও নমনীয় হিসাবে দেখছি। আপনার কাছে এখন কেবল একজন পর্যবেক্ষক থাকতে পারে তবে ভবিষ্যতের ডিজাইনে একাধিক পর্যবেক্ষকের প্রয়োজন হতে পারে।


4
"ডেলিগেট প্যাটার্ন" বলতে কী বোঝ? আপনি যদি নেট এর প্রতিনিধিদের মতো কিছু সম্পর্কে কথা বলছেন তবে আপনার পছন্দমতো গ্রাহক থাকতে পারবেন।
কোডসইনচাওস

সম্পর্কিত, যদিও কোকোতে বেশি মনোনিবেশ করা হয়েছে: এনএসনিটিফিকেশন সেন্টার বনাম প্রতিনিধি (প্রোটোকল ব্যবহার করে)?
mouviciel

উত্তর:


7

প্রতি সেউতে কোনও প্রতিনিধি প্যাটার্ন নেই। আমি আপনাকে ধরে নিচ্ছি ডেলিগেশন প্যাটার্ন মানে ।

আমি এটি বুঝতে পেরেছি যে এগুলি একে অপরের সম্পূর্ণ বিপরীত এবং বিভিন্ন উদ্দেশ্যে ব্যবহৃত হয়।

সাধারণত, একটি পর্যবেক্ষক প্যাটার্ন সহ , পর্যবেক্ষকের যে কোনও সংখ্যক বস্তু দ্বিতীয় বস্তুর একটি ইভেন্ট শোনবে এবং ইভেন্টটিতে কাজ করবে। দ্বিতীয় বস্তুর শ্রোতার কোনও জ্ঞান নেই। এটি কেবল তাদের কাছে কল দেয়।

একটি প্রতিনিধি অবজেক্ট দ্বিতীয় অবজেক্টে পাস করা হয় যা ডেলিগেটের সরাসরি পদ্ধতিগুলিকে কল করে। এবং এর মধ্যে আপনি যে সুবিধাটি সন্ধান করছেন তা নিহিত। একাধিক শ্রোতার কাছে একটি বার্তা প্রেরণের পরিবর্তে এটির একটি একক বস্তুর (একটি নির্দিষ্ট সময়ে) সম্পূর্ণ নিয়ন্ত্রণ রয়েছে। আরও দেখুন কন্ট্রোল ইনভার্সান


6

আপনি জিনিসগুলি ভুলভাবে দেখছেন। একটি পর্যবেক্ষক দেখেন যে একটি নির্দিষ্ট ঘটনা ঘটে। এটি এর উপর প্রভাব ফেলবে না বা এর মালিক হবে না। কোনও প্রতিনিধি একটি নির্দিষ্ট ইভেন্ট পরিচালনা করে এবং হ্যান্ডলারের মালিকানা থাকে, এমনকি যদি প্রতিনিধি ইভেন্টটির ইন্টারফেসের মালিক হয়।


1
একজন প্রতিনিধি সত্যই কোনও ইভেন্টের পর্যবেক্ষক ছাড়া আর কিছু নয়। একটি প্রতিনিধি কিছু "হ্যান্ডেল" প্রয়োজন হয় না। এটি নিরাপদে কিছু করতে পারে না এবং (বা কমপক্ষে এমন হওয়া উচিত নয়) ঘটনাটি উদ্দীপ্তকারী ঘটনাকে প্রভাবিত করবে।
মার্জন ভেনেমা

5
@MarjanVenema - যদি বস্তুর একটি নয় প্রতিনিধিরূপে বস্তুর বি ইভেন্টের জন্য দায়িত্ব, আপনি প্রতিনিধিদল প্যাটার্ন ব্যবহার করছেন না: আপনি শুধুমাত্র একটি পর্যবেক্ষক সঙ্গে পর্যবেক্ষক প্যাটার্ন ব্যবহার করছেন।
তেলস্তিন

হ্যাঁ, আমি এটিই ভাবছিলাম। আমি বুঝতে পেরেছি যে কোনও "অন-ওয়েভিংস" ইভেন্টের গ্রাহক দ্বারা ব্যবহৃত ইভেন্টের স্বাক্ষরের প্রকারগুলি হিসাবে প্রতিনিধি হয়েছি। দৃশ্যত ডেলফি হিসাবে সি # তে প্রতিনিধিরা একক গ্রাহক নন।
মার্জন ভেনেমা

@ মারজান ভেনেমা "একজন প্রতিনিধি সত্যিই কোনও অনুষ্ঠানের পর্যবেক্ষক ছাড়া আর কিছুই নয়।" - আপনি কোন ভাষা নিয়ে কথা বলছেন তা নির্ভর করে। উদ্দেশ্য সিতে কিছু প্রতিনিধি ডেটা সরবরাহের জন্য দায়বদ্ধ - যেমন ডেটা প্রতিনিধি - এবং কোনও ডেটা প্রতিনিধি অনুপস্থিত কোনও বস্তুর উপস্থাপনের জন্য কোনও ডেটা নেই। এই ক্ষেত্রে, প্রতিনিধিদল ঘটছে, কেবল কিছু পর্যবেক্ষণ করার কাজ থেকে পৃথক।
দ্বিতীয়

1
@ ককুলাস: স্পষ্টতার জন্য ধন্যবাদ। ভাষা যে শব্দগুলি পরিভাষায় একমত হতে পারে না ... ভাষা অজ্ঞাত পদ্ধতিতে প্রোগ্রামিং সম্পর্কে কথা বলা যখন মানুষ একই শব্দের জন্য বিভিন্ন জিনিস বোঝে তখন কিছুটা শক্ত হয়ে যায়।
মার্জন ভেনেমা

4

এটি বেশ কয়েকটি ট্রেড অফের একটি প্রশ্ন।

বিনিময় প্রথা: একদম

  • নমনীয়তা (এন> 1 প্রতিনিধি / পর্যবেক্ষক থাকার শর্তে)
  • একটি বার্তা প্রেরণ খরচ
  • স্থিতিস্থাপকতা (প্রতিনিধি / পর্যবেক্ষকদের অনুপলব্ধতা বজায় রাখার ক্ষমতা)
  • ব্যবহারে সহজ

প্রতিনিধি প্যাটার্ন:

  • খুব নমনীয় নয় - 1 টিরও বেশি প্রতিনিধি যুক্ত করা সম্ভব নয় ("মাল্টি-ডেলিগেট" এর কিছু রূপ অর্থাত পর্যবেক্ষক নিদর্শন বোঝায়)
  • ও (1) বার্তা প্রেরণ করা সস্তা - অন্য কোনও ক্রিয়াকলাপ বা পদ্ধতি কল করার সমান মূল্য (কোনও চেহারা নয়, বার্তা সারি বা অন্যান্য অবকাঠামো প্রয়োজন নেই)
  • সাধারণত স্থিতিস্থাপক নয় - প্রতিনিধিরা উপস্থিত থাকবেন এবং তাদের কাজের অংশটি করবেন বলে প্রত্যাশা করা হয়, অর্থাত প্রেরক প্রেরণকারীকে না জানা থাকলে ব্যর্থ হন
  • উপলব্ধি করা সহজ, কার্যকর করা সহজ

পর্যবেক্ষক প্যাটার্ন:

  • খুব নমনীয় - n> 1 টি পর্যবেক্ষক ডিজাইন দ্বারা প্রত্যাশিত
  • একটি বার্তা প্রেরণে পর্যবেক্ষকের সংখ্যা দ্বারা নির্ধারিত ব্যয় হয়, হে (এন), অর্থাৎ এন পর্যবেক্ষকরা সময় এবং বার্তা নেয় (কমপক্ষে একটি নির্বিকার প্রয়োগে)
  • সাধারণত স্থিতিস্থাপক - পর্যবেক্ষকগণ প্রেরকের পক্ষ থেকে সাধারণত কোনও কাজ করার আশা করা হয় না। এমনকি যদি সেখানে কোনও পর্যবেক্ষক না থাকে তবে প্রেরক প্রভাবশালী হন
  • উপলব্ধি করা বরং জটিল হয়ে উঠতে পারে, বিশেষত পর্যবেক্ষকদের বার্তাগুলিতে প্রতিক্রিয়া প্রত্যাশা করা হয় (আদেশের বিষয়টি কী ?, কোন পর্যবেক্ষক কোন উপায়ে সাড়া দেয়?)

1

প্রতিনিধি প্যাটার্ন, যেমনটি আমি আপনাকে বুঝতে পারি, এটি অন্যান্য ভাষায় ইভেন্ট হ্যান্ডলার প্রক্রিয়া হিসাবে পরিচিত, উদাহরণস্বরূপ ডেলফি। যেমন এটি কেবল একটি প্রধান সীমাবদ্ধতা সহ পর্যবেক্ষক প্যাটার্নের বাস্তবায়ন: একবারে কেবলমাত্র একজন শ্রোতা।

ইভেন্ট হ্যান্ডলার বা প্রতিনিধিদের অসুবিধা স্পষ্ট: কেবলমাত্র একজন পর্যবেক্ষক।

সুবিধা এতটা সুস্পষ্ট নয়: পারফরম্যান্স। একটি পর্যবেক্ষক নিদর্শন দিয়ে আপনি অনেক পর্যবেক্ষক যুক্ত করতে পারেন। যখন কোনও ঘটনা ঘটে তখন পর্যবেক্ষকদের সম্পর্কে অবহিত করা দরকার, আপনাকে পর্যবেক্ষকদের গণনা করতে হবে এবং প্রত্যেককে একটি বিজ্ঞপ্তি প্রেরণ করতে হবে। এটি দ্রুত যে কোনও পর্যবেক্ষণ হওয়া দৃষ্টান্তটি ছুঁড়ে ফেলতে পারে, বিশেষত যখন ইভেন্টগুলির নোটিফিকেশন প্রয়োজন তার সংখ্যাটিও তাত্পর্যপূর্ণ।


তাই না? সি # প্রতিনিধি হ'ল ভেরিয়েবল টাইপ হিসাবে কোনও পদ্ধতির কেবল স্বাক্ষর (উদাহরণস্বরূপ, int (*my_int_f)(int)সি তে)। আমি সবসময়ই ভেবেছি তারা স্ট্রাক্ট / এনামের মতো আরও কাজ করে এটি বুঝতে সহজ করে তুলবে। একটি ইভেন্ট হ'ল শ্রোতাদের নমনীয় অ্যারেগুলির জন্য একটি একক প্রতিনিধি স্বাক্ষর ব্যবহার করে। আপনি কোনও ইভেন্ট ছাড়াই এটি করতে পারেন (যার কারণেই আমি ধরে নিই যে ওপি মানে ডেলিগেশন প্যাটার্ন, যা খুব আলাদা) তবে ভাষাটি আপনার পক্ষে সহজ করে তুলছে।
পিডিআর

হুম। এখনও সি # তে পারদর্শী নয়। আমি প্রতিনিধিদের উদাহরণস্বরূপ ডেল্ফিতে "ওয়ানডবউইজিং" ইভেন্ট দ্বারা ব্যবহৃত ইভেন্টের স্বাক্ষরের ধরণের সমতুল্য হতে বুঝেছিলাম। সুতরাং সি # ইভেন্টগুলি একাধিক শ্রোতার দ্বারা সদস্যতা নেওয়া যায়?
মার্জন ভেনেমা

জেনেরিক অ্যাকশন <টি> একটি প্রতিনিধি। ঘটনাগুলির সাথে এর কোনও যোগসূত্র নেই, এটি একটি পরিবর্তনশীল যা প্রায় পাশ হয়ে যায়। এবং হ্যাঁ, একাধিক শ্রোতা একটি ইভেন্ট শুনতে পারেন।
পিডিআর

ঠিক আছে ধন্যবাদ, আশা করি আমি এটিকে সোজা রাখতে পারি ... :-) সি # রেফারেন্স খুঁজে নিয়ে ইভেন্ট ইভেন্টটিটিতে আরও মনোনিবেশ করেছি।
মার্জন ভেনেমা

1

এটি একটি পুরানো পোস্ট তবে যাইহোক আমি চিমিয়ে যাচ্ছি কারণ অন্য উত্তরগুলি যে কোনও প্যাটার্ন ব্যবহার করার সময় কী ঘটছে তা মোকাবেলা করে না, তারা অনুশীলনের চেয়ে তত্ত্ব সম্পর্কে আরও বেশি বলে মনে হয়।

প্রতিনিধি এবং পর্যবেক্ষক কীভাবে কাজ করেন

প্রতিনিধি দলের সাথে সম্ভাব্য ইভেন্টের উত্স তৈরি হওয়ার মুহূর্তে নির্দিষ্ট ইভেন্টে কে প্রতিক্রিয়া জানাতে চলেছে ঠিক সেটিকে বেছে নেয়। আপনি এই শ্রোতাকে একক পর্যবেক্ষক হিসাবে ভাবতে পারেন । পর্যবেক্ষক প্যাটার্নের ক্ষেত্রে পর্যবেক্ষক যখনই এটির মতো অনুভূত হয় তখন পর্যবেক্ষকরা এটি পর্যবেক্ষণ করছেন; সুতরাং যখন পর্যবেক্ষক বনাম প্রতিনিধিদের কথা আসে তখন নির্ভরতাগুলি বিপরীত হয়। পর্যবেক্ষক ধাঁচের সাথে কোনও সংবাদপত্র এবং গ্রাহকগণকে পর্যবেক্ষক হিসাবে ভাবেন। সম্পর্ক কখন তৈরি হবে তা পর্যবেক্ষকরা নিয়ন্ত্রণে রাখেন। প্রতিনিধিদলের সাথে একজন কর্মচারী এবং একজন নিয়োগকর্তার কথা ভাবেন। কখন সম্পর্কটি তৈরি হয় এবং নির্দিষ্ট ইভেন্টগুলির দায়িত্বে নিখুঁত দায়িত্বে থাকে তা নিয়োগকর্তার নিয়ন্ত্রণে থাকে। কর্মীরা সাধারণত কোন কাজগুলিতে তারা কাজ করছে তা চয়ন করতে পারে না।

কিছু যুক্তিযুক্ত প্রতিনিধিদলের একজন পর্যবেক্ষক থাকতে পারে তবে আমি মনে করি যে ইভেন্ট হ্যান্ডলিংকে কীভাবে নির্ধারিত করা হয়েছে তা উভয়ের মধ্যে প্রকৃত পার্থক্য। আপনি কোনও ইভেন্টের জন্য কোনও প্রতিনিধি নিবন্ধ দেখতে পাবেন না। এটি ঘটবে না এমন পর্যন্ত ইভেন্টটি পরিচালনা করা এটি কখনই জানতে পারবে না এবং প্রতিনিধি এতে একটি সরকারী পদ্ধতি কল করে।

প্রতিনিধি উপকার

এই নিদর্শনটি অত্যন্ত অনমনীয় এবং বেশিরভাগ নিয়মিত নকশার সাথে এর সহজ এবং সাধারণভাবে আরও শক্তিশালী। এটি আপনাকে সম্ভাব্য ইভেন্টের উত্স সূচনা করার সময় আপনার ইভেন্ট হ্যান্ডলারটি সামনে ঘোষণা করতে বাধ্য করে। আপনার যদি ট্র্যাফিকের জন্য কাউকে প্রয়োজন হয় তবে আপনি রাস্তায় খোলার আগে ট্র্যাফিক ডিরেক্টরকে নিয়োগ করুন assign পর্যবেক্ষকের ক্ষেত্রে আপনি ট্র্যাফিক পুলিশকে পছন্দ করতে দিতেন যে কখন যে কোনও সময় ট্র্যাফিকের নির্দেশনা দিতে হবে সে যখন সে পছন্দ করেছে felt

প্রতিনিধি অসুবিধা

এই নকশার অসুবিধা হ'ল এটি নমনীয় নয়। আপনি যদি কোনও পত্রিকার সাবস্ক্রাইব করার জন্য কিছু কোড প্রয়োগ করে থাকেন তবে সংবাদপত্র / প্রতিনিধিরা তাদের দ্বিতীয়বার তৈরি হওয়া নিউজ স্টোরিটি ঠিক কে পড়তে পারে তা সনাক্ত করতে হবে। পর্যবেক্ষক প্যাটার্ন দিয়ে এগুলি যে কোনও সময়ে নিবন্ধিত হতে পারে এবং সংবাদপত্রটি কেবলমাত্র জানতে হবে যে কোনও নতুন ব্যক্তি সাইন আপ করেছেন।

ডেলিগেশন কখন নির্বাচন করবেন?

যখন আপনার অবশ্যই কোনও নির্দিষ্ট পর্যবেক্ষকের প্রয়োজন হয় এবং কারা পর্যবেক্ষণ করছেন তা পরিবর্তনের কোনও কারণ নেই তবে প্রতিনিধি দলের প্যাটার্নের অনমনীয় নকশাটি উপকারী হবে।

উদাহরণস্বরূপ, নির্দিষ্ট ত্রুটির জন্য পপ-আপ তৈরি করতে আপনার কোনও শ্রেণি / অবজেক্টের প্রয়োজন। রান-টাইমে আপনাকে কোনও নির্দিষ্ট ত্রুটি কে পরিচালনা করছে তা পরিবর্তন করার প্রয়োজন হবে এমন অনেকগুলি কারণ নেই কারণ "মেমরির আউট-অফ স্মৃতি" ত্রুটিটি একটি একক সত্তায় অর্পণ করা অর্থপূর্ণ হবে। সম্ভাব্য হ্যান্ডলারের একটি অ্যারে তৈরি করা এবং তারপরে সেই হ্যান্ডলারগুলিকে "আউট অফ মেমরি" ত্রুটির জন্য নিবন্ধভুক্ত করা খুব বেশি অর্থবোধ করে না; এই পরিস্থিতিতে পর্যবেক্ষক প্যাটার্ন ব্যবহার করার উদাহরণ হতে পারে। রান-টাইমে আপনি কী পদ্ধতিগুলি কল করতে চান বা "ডেলিগেট" কে পরিবর্তনশীল ইভেন্টগুলির জন্য ডাকা হয় তা পরিবর্তন করতে চান তবে রান-টাইমে কোনও নির্দিষ্ট ইভেন্টের জন্য ইভেন্ট হ্যান্ডলারকে সরিয়ে নেওয়া স্বাভাবিক নয়।

আপনি যেমন পর্যবেক্ষক প্যাটার্নে করতেন তেমন প্রতিনিধিদের অদলবদল করা অসম্ভব, এটি কেবল জটিল। প্রকৃত বিশ্বে সম্ভবত আপনি ট্র্যাফিক পুলিশগুলিকে অদলবদল করতে চান যাতে নতুন প্রতিনিধি ট্রাফিক পরিচালনা করে। যে কেউ তর্ক করতে পারে যে আরও ভাল ডিজাইনটি মূল পুলিশ প্রতিনিধিকে একটি থানা তৈরি করবে এবং একক পুলিশ অফিসার নয় বরং আমি ডিগ্রি করি ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.