জাভা কোর লাইব্রেরিতে GoF ডিজাইন প্যাটার্নগুলির উদাহরণ


672

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

উত্তর:


3229

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


সৃষ্টিশীল নিদর্শন

অ্যাবস্ট্রাক্ট ফ্যাক্টরি ( কারখানায় ফিরতে সৃষ্টিশীল পদ্ধতি দ্বারা স্বীকৃত যা ফলস্বরূপ অন্য বিমূর্ত / ইন্টারফেস প্রকার তৈরি করতে ব্যবহৃত হতে পারে)

নির্মাতা (ক্রিয়েশনাল পদ্ধতি দ্বারা স্বীকৃতিটি নিজেই ফিরে আসে)

কারখানা পদ্ধতি (একটি বিমূর্ত / ইন্টারফেস ধরণের প্রয়োগ বাস্তবায়নে সৃষ্টিশীল পদ্ধতি দ্বারা স্বীকৃত)

প্রোটোটাইপ ( একই বৈশিষ্ট্যগুলির সাথে নিজের আলাদা উদাহরণ ফেরত সৃষ্টিশীল পদ্ধতি দ্বারা স্বীকৃত )

সিঙ্গেলটন ( ক্রিয়েটিভ পদ্ধতি দ্বারা একই সময়ে ফিরে আসা (সাধারণত নিজেরাই) প্রত্যক্ষযোগ্য)


কাঠামোগত নিদর্শন

অ্যাডাপ্টার ( বিভিন্ন বিমূর্ত / ইন্টারফেস ধরণের উদাহরণ গ্রহণ করে ক্রিয়েশনাল পদ্ধতি দ্বারা স্বীকৃত এবং নিজস্ব / অন্য বিমূর্ত / ইন্টারফেস প্রকারের প্রয়োগটি প্রদান করে যা প্রদত্ত উদাহরণটিকে সজ্জিত / ওভাররাইড করে)

ব্রিজ ( বিভিন্ন বিমূর্ত / ইন্টারফেস ধরণের উদাহরণ গ্রহণ করে এবং নিজস্ব বিমূর্ত / ইন্টারফেস প্রকারের প্রয়োগটি প্রদান করে যা প্রদত্ত উদাহরণগুলিকে প্রতিনিধিত্ব করে / ব্যবহার করে সৃজনশীল পদ্ধতিগুলি দ্বারা স্বীকৃত )

  • এখনও কারও মনে আসে না। একটি কল্পিত উদাহরণ হ'ল new LinkedHashMap(LinkedHashSet<K>, List<V>)যা একটি অবিশ্বাস্য লিঙ্কযুক্ত মানচিত্র দেয় যা আইটেমগুলি ক্লোন করে না, তবে সেগুলি ব্যবহার করে। java.util.Collections#newSetFromMap()এবং singletonXXX()পদ্ধতি তবে বন্ধ আসে।

সংমিশ্রণ ( গাছের কাঠামোর মধ্যে একই বিমূর্ত / ইন্টারফেসের ধরণের উদাহরণ গ্রহণকারী আচরণ পদ্ধতি দ্বারা স্বীকৃত )

অলঙ্করণকারী ( অতিরিক্ত আচরণ যুক্ত করে এমন একই বিমূর্ত / ইন্টারফেস ধরণের উদাহরণ গ্রহণ করে সৃজনশীল পদ্ধতিগুলি দ্বারা স্বীকৃত )

মুখোমুখি (আচরণগত পদ্ধতি দ্বারা স্বীকৃত যা অভ্যন্তরীণভাবে বিভিন্ন স্বতন্ত্র বিমূর্ত / ইন্টারফেস ধরণের উদাহরণগুলি ব্যবহার করে )

ফ্লাইওয়েট (ক্র্যাশিয়াল পদ্ধতিতে ক্যাশেড উদাহরণ ফিরিয়ে দেওয়া, কিছুটা "মাল্টিটন" ধারণা দ্বারা স্বীকৃত)

প্রক্সি (সৃজনশীল পদ্ধতিগুলি দ্বারা স্বীকৃত যা প্রদত্ত বিমূর্ত / ইন্টারফেস ধরণের প্রয়োগ বাস্তবায়িত করে যা প্রত্যাবর্তন / প্রদত্ত বিমূর্ত / ইন্টারফেস ধরণের একটি পৃথক বাস্তবায়ন ব্যবহার করে )


আচরণগত নিদর্শন

দায়িত্বের শৃঙ্খলা (আচরণের পদ্ধতি দ্বারা স্বীকৃত যা (পরোক্ষভাবে) একটি সারিতে একই বিমূর্ত / ইন্টারফেসের ধরণের অন্য প্রয়োগে একই পদ্ধতিটি আহ্বান করে )

কমান্ড (একটি বিমূর্ত / ইন্টারফেস ধরনের যা একজন বাস্তবায়নের একটি পদ্ধতি ডাকে মধ্যে আচরণগত পদ্ধতি দ্বারা recognizeable বিভিন্ন বিমূর্ত / ইন্টারফেস ধরনের যা হয়েছে encapsulated নির্মাণের সময় কমান্ড বাস্তবায়ন দ্বারা)

দোভাষী ( কাঠামোগতভাবে পৃথক উদাহরণ / প্রদত্ত উদাহরণের ধরন / প্রকারের আচরণগত পদ্ধতিগুলি দ্বারা স্বীকৃত ; নোট করুন যে পার্সিং / ফর্ম্যাট করা কোনও প্যাটার্নের অংশ নয়, প্যাটার্নটি নির্ধারণ করে এবং এটি কীভাবে প্রয়োগ করতে হবে)

আইট্রেটার (আচরণের পদ্ধতিগুলি ক্রম থেকে একটি সারি থেকে বিভিন্ন ধরণের উদাহরণগুলি ফেরত দিয়ে সনাক্তযোগ্য )

মধ্যস্থতাকারী (আচরণগত পদ্ধতি দ্বারা পৃথক বিমূর্ত / ইন্টারফেস ধরণের উদাহরণ (সাধারণত কমান্ড প্যাটার্ন ব্যবহার করা হয়) যা প্রদত্ত উদাহরণটি ব্যবহার করে / ব্যবহার করে)

মেমেন্টো (আচরণগত পদ্ধতি দ্বারা স্বীকৃত যা অভ্যন্তরীণভাবে পুরো উদাহরণের অবস্থার পরিবর্তন করে )

  • java.util.Date(সেটার পদ্ধতিগুলি এমনটি করে Dateযা অভ্যন্তরীণভাবে একটি longমান দ্বারা উপস্থাপিত হয়)
  • সমস্ত বাস্তবায়ন java.io.Serializable
  • সমস্ত বাস্তবায়ন javax.faces.component.StateHolder

পর্যবেক্ষক (বা প্রকাশ / সাবস্ক্রাইব) (আচরণগত পদ্ধতি দ্বারা স্বীকৃত যা নিজের রাষ্ট্রের উপর নির্ভর করে অন্য একটি বিমূর্ত / ইন্টারফেস ধরণের উদাহরণের জন্য কোনও পদ্ধতিকে অনুরোধ করে )

রাষ্ট্র (বাহ্যিকভাবে নিয়ন্ত্রণ করা যায় এমন উদাহরণের রাজ্যের উপর নির্ভর করে আচরণগত পদ্ধতিগুলি যা এটির আচরণকে পরিবর্তন করে তা স্বীকৃত)

  • javax.faces.lifecycle.LifeCycle#execute()(এর দ্বারা নিয়ন্ত্রিত FacesServlet, আচরণটি জেএসএফ লাইফসাইকের বর্তমান পর্যায়ে (রাজ্য) এর উপর নির্ভরশীল)

কৌশল (বিমূর্ত / ইন্টারফেস প্রকারের আচরণগত পদ্ধতি দ্বারা স্বীকৃত যা কৌশল প্রয়োগের ক্ষেত্রে পদ্ধতির যুক্তি হিসাবে পাস-ইন করা হয়েছে এমন একটি পৃথক বিমূর্ত / ইন্টারফেস প্রকারের প্রয়োগের জন্য একটি পদ্ধতিকে অনুরোধ করে)

  • java.util.Comparator#compare(), অন্যদের দ্বারা মৃত্যুদন্ড কার্যকর করা Collections#sort()
  • javax.servlet.http.HttpServlet, service()এবং সমস্ত doXXX()পদ্ধতি গ্রহণ করে HttpServletRequestএবং HttpServletResponseপ্রয়োগকারীকে তাদের প্রক্রিয়া করতে হয় (এবং উদাহরণের ভেরিয়েবল হিসাবে ধরে রাখতে না!)।
  • javax.servlet.Filter#doFilter()

টেমপ্লেট পদ্ধতি (আচরণগত পদ্ধতিগুলির দ্বারা স্বীকৃত যা ইতিমধ্যে একটি বিমূর্ত প্রকার দ্বারা সংজ্ঞায়িত "ডিফল্ট" আচরণ রয়েছে)

দর্শনার্থী (দুটি পৃথক বিমূর্ত / ইন্টারফেস ধরণের দ্বারা স্বীকৃত যা পদ্ধতিগুলি সংজ্ঞায়িত করে যা একে অপরকে বিমূর্ত / ইন্টারফেস প্রকার গ্রহণ করে; একজন আসলে অন্যটির পদ্ধতি কল করে এবং অন্যটি এতে পছন্দসই কৌশল সম্পাদন করে)


23
চিত্তাকর্ষক .. :) +1। javax.lang.model.elementদর্শক সংজ্ঞায়িত;) আমি পুরোপুরি নিশ্চিত কিনা নই doXXXএবং doFilter"কৌশল" হয়।
বোঝো

16
উল্লিখিত বিল্ডারগণ যেমন স্ট্রিনবজিবার্ডার সমস্ত বিল্ডার-প্যাটার্নের উদাহরণ নয়। তাদের বিল্ডার হিসাবে বিবেচনা করা তবে এটি একটি খুব সাধারণ ভুল (যাতে আপনি সত্যিই দোষ দেবেন না ^ _ ^)
অ্যাঞ্জেল ও'স্পিয়ার

77
@ বালুসসি, আপনাকে জিজ্ঞাসা করার জন্য আমার একটি প্রশ্ন রয়েছে। আপনি পড়তে হয়নি গোটা জাভা এবং JSF সোর্স কোড?
তাপস বোস

20
@ তপাস: আমি সমস্ত কিছু পড়িনি, কেবল যে অংশগুলির আমার প্রয়োজন ছিল, বা কীভাবে "তারা" এটি করেছে তা সম্পর্কে আগ্রহী ছিলাম।
বালুসসি

7
"কারখানা পদ্ধতি" এর অধীনে বেশিরভাগ উদাহরণ হ'ল "স্ট্যাটিক ফ্যাক্টরি" এর উদাহরণ যা কোনও জিওএফ প্যাটার্ন নয়। সঠিক না.
রিং বাহক 11

107
  1. পুরো দোল জুড়ে পর্যবেক্ষক নিদর্শন ( Observable, Observer)
  2. এমভিসিও দুলছে
  3. অ্যাডাপ্টার প্যাটার্ন: InputStreamReader এবং OutputStreamWriter উল্লেখ্য: ContainerAdapter, ComponentAdapter, FocusAdapter, KeyAdapter, MouseAdapterহয় না অ্যাডাপ্টার; এগুলি আসলে নুল অবজেক্টস। সান দ্বারা নামকরণের দরিদ্র পছন্দ
  4. BufferedInputStreamসাজসজ্জার প্যাটার্ন ( যেমন অন্যান্য স্ট্রিম সাজাইয়া দিতে পারেন FilterInputStream)
  5. অ্যাডব্ল্যাকটি ফ্যাক্টরি প্যাটার্ন অ্যাডাব্লুটি টুথকিট এবং সুইং প্লাগেবল বর্ণন ও অনুভূতি ক্লাসগুলির জন্য
  6. java.lang.Runtime#getRuntime() সিঙ্গলটন
  7. ButtonGroup মধ্যস্থতা প্যাটার্ন জন্য
  8. Action, AbstractActionএকই কোড -> কমান্ড প্যাটার্ন সম্পাদন করতে বিভিন্ন ভিজ্যুয়াল উপস্থাপনার জন্য ব্যবহার করা যেতে পারে
  9. ফ্লাইওয়েট প্যাটার্নের জন্য জেটিবেলে অভ্যন্তরীণ স্ট্রিংস বা সেলরেন্ডার (বিভিন্ন পুল সম্পর্কেও চিন্তা করুন - থ্রেড পুল, সংযোগ পুল, ইজেবি অবজেক্ট পুল - ফ্লাইওয়েট আসলে শেয়ার্ড রিসোর্সগুলির পরিচালনা সম্পর্কে)
  10. সার্ভালেট ফিল্টারগুলির মতো জাভা 1.0 ইভেন্টের মডেলটি চেইন অফ দায়িত্বশীলতার একটি উদাহরণ।
  11. সংগ্রহ ফ্রেমওয়ার্কে আইট্রেটার প্যাটার্ন
  12. এডাব্লুটি / সুইংয়ের নেস্টেড পাত্রে সম্মিলিত প্যাটার্ন ব্যবহার করা হয়
  13. এডাব্লুটি / সুইংয়ের লেআউট ম্যানেজার কৌশলটির উদাহরণ

এবং আরও অনেক কিছু আমি অনুমান করি


1
মাউসএডাপ্টারে টিপ দেওয়ার জন্য ধন্যবাদ। : আমি এই exaplanation পাওয়া stackoverflow.com/questions/9244185/...
লিঙ্কন

নোট করুন যে সুইং কেবল আলগাভাবে এমভিসির উপর ভিত্তি করে। এটি ভিউ এবং কন্ট্রোলারকে এক শ্রেণিতে ভেঙে দিয়েছে।
ম্যাথিয়াস ব্রাউন

51
  1. ফ্লাইটওয়েট বাইট, শর্ট, ইন্টিজার, লং এবং স্ট্রিংয়ের কয়েকটি মান সহ ব্যবহৃত হয়।
  2. ফেকাড অনেক জায়গায় ব্যবহৃত হয় তবে সর্বাধিক সুস্পষ্ট হ'ল স্ক্রিপ্টিং ইন্টারফেস।
  3. সিঙ্গলটন - java.lang. রুনটাইম মনে আসে।
  4. বিমূর্ত কারখানা - এছাড়াও স্ক্রিপ্টিং এবং জেডিবিসি এপিআই।
  5. কমান্ড - টেক্সট কম্পোনেন্টের পূর্বাবস্থা / পুনরায় করুন।
  6. দোভাষী - RegEx (java.util.regex। ) এবং এসকিউএল (java.sql। ) এপিআই।
  7. প্রোটোটাইপ - এই গণনাটি 100% নিশ্চিত না তবে আমি মনে করি clone()এই উদ্দেশ্যে ব্যবহার করা যেতে পারে।

1
বিষয়ে ফ্লাইওয়েট প্যাটার্ন: এটা থেকে আলাদা লেআউট পরিচালকের হতে পারে java.awtএবং java.swingপ্যাকেজ। প্রকৃতপক্ষে, তারা প্রায় অভিন্ন আন্তঃজাতীয় বৈশিষ্ট্যগুলি ভাগ করে এবং বহিরাগত বৈশিষ্ট্যগুলি বিভিন্ন ইউআই উপাদান যা তারা ইউআই আকারে রাখে।
ভাইটালি 16

@ নওয়ামন আপনি বলেছেন Co. কোম্যান্ড টেক্সট কম্পোনেন্টটির পূর্বাবস্থা / পূর্বাবস্থা কর। আমি মনে করি এটি কমেন্ট নয় মেমেন্টো। বা সম্ভবত উভয়।
স্টিম্পসন বিড়াল

আপনি কি দয়া করে আমাকে একটি সম্পর্কিত প্রশ্নে সহায়তা করতে পারেন - stackoverflow.com/questions/61284856/… । আমি এই সাধারণ উদাহরণে কমান্ড প্যাটার্নটি ব্যবহার করেছি, তবে আমার সমস্যা সমাধানের সঠিক উপায় এটি কিনা তা আমি নিশ্চিত নই।
টম জো

42

আরএমআই প্রক্সি ভিত্তিক।

GoF এ 23 টি ধরণের বেশিরভাগের জন্য একটিকে উদ্ধৃত করা সম্ভব হবে:

  1. অ্যাবস্ট্রাক্ট ফ্যাক্টরি: java.sql ইন্টারফেসগুলি ড্রাইভার নিবন্ধিত হওয়ার পরে জেডিবিসি জেআর থেকে তাদের কংক্রিট বাস্তবায়নগুলি গ্রহণ করে।
  2. নির্মাতা: java.lang.StringBuilder।
  3. কারখানার পদ্ধতি: এক্সএমএল কারখানাগুলি, অন্যদের মধ্যে।
  4. প্রোটোটাইপ: সম্ভবত ক্লোন (), তবে আমি নিশ্চিত যে আমি এটি কিনছি buying
  5. সিঙ্গলটন: java.lang.System
  6. অ্যাডাপ্টার: java.awt.event এডাপ্টার ক্লাস, যেমন উইন্ডোএডাপ্টার।
  7. ব্রিজ: java.util মধ্যে সংগ্রহের ক্লাস। অ্যারেলিস্ট দ্বারা কার্যকর করা তালিকা।
  8. সংমিশ্রণ: java.awt। java.awt.Comp घटक + java.awt.Container
  9. সাজসজ্জা: সমস্ত java.io প্যাকেজ জুড়ে।
  10. মুখোমুখি: কুকি, সেশন স্কোপ এবং অনুরূপ ক্রিয়াকলাপ সম্পাদন করার জন্য এক্সটার্নাল কনটেক্সট ফেকড হিসাবে আচরণ করে।
  11. ফ্লাইওয়েট: পূর্ণসংখ্যা, চরিত্র ইত্যাদি
  12. প্রক্সি: java.rmi প্যাকেজ
  13. দায়িত্বের চেইন: সার্লেট ফিল্টারগুলি
  14. আদেশ: সুইং মেনু আইটেম
  15. দোভাষী: সরাসরি জেডিকে নেই, তবে জাভাসিসি অবশ্যই এটি ব্যবহার করে।
  16. Iterator: java.util.Iterator ইন্টারফেস; এর থেকে পরিষ্কার হতে পারে না।
  17. মধ্যস্থতা: জেএমএস?
  18. মেমেন্টো:
  19. পর্যবেক্ষক: java.util.Oserser/Observable (খারাপভাবে করা হয়েছে, যদিও)
  20. রাষ্ট্র:
  21. কৌশল:
  22. টেমপ্লেট:
  23. দর্শনার্থী:

আমি 23 এর মধ্যে 10 এর জন্য জাভাতে উদাহরণগুলি ভাবতে পারি না, তবে আমি আগামীকাল আরও ভাল করতে পারি কিনা তা আমি দেখতে পাচ্ছি। এডিট এর জন্য।


28

বিমূর্ত কারখানার প্যাটার্ন বিভিন্ন জায়গায় ব্যবহৃত হয়। যেমন, , ।DatagramSocketImplFactory PreferencesFactoryআরও অনেক রয়েছে --- ইন্টারফেসের জন্য জাভাডোক অনুসন্ধান করুন যার নামে "কারখানা" শব্দ রয়েছে।

কারখানার প্যাটার্নের বেশ কয়েকটি উদাহরণও রয়েছে।


22

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

Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().parse(source);
String title = XPathFactory.newInstance().newXPath().evaluate("//title", doc);

...এবং তাই এবং তাই ঘোষণা.

অতিরিক্তভাবে বিভিন্ন বাফার (স্ট্রিংবাফার, বাইটবফার, স্ট্রিংবুডার) বিল্ডার ব্যবহার করে।


21

java.util. Colલેક્શન # আইট্রেটার একটি কারখানা পদ্ধতির একটি ভাল উদাহরণ। আপনার ব্যবহৃত সংগ্রহের কংক্রিট সাবক্লাসের উপর নির্ভর করে এটি একটি আইট্রেটার বাস্তবায়ন তৈরি করবে। কারখানা কারখানা সুপারক্লাস (সংগ্রহ) এবং তৈরি করা আইট্রেটার উভয়ই ইন্টারফেস হয়, এটি কখনও কখনও অ্যাবস্ট্রাকফ্যাক্টরিতে বিভ্রান্ত হয়। গৃহীত উত্তরে (বালুসসি) অ্যাবস্ট্র্যাক্ট ফ্যাক্টরির বেশিরভাগ উদাহরণ হ'ল ফ্যাক্টরির উদাহরণ , কারখানা পদ্ধতির একটি সরল সংস্করণ, যা মূল জিওএফ নিদর্শনগুলির অংশ নয়। ফ্যাকোরিতে কারখানার শ্রেণিবিন্যাস ভেঙে ফ্যাক্টরিটি পণ্যটি ফেরত দেওয়ার জন্য চয়ন করার জন্য অন্যান্য উপায় ব্যবহার করে।

  • বিমূর্ত কারখানা

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

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