"স্ট্রিংবিল্ডার" কি বিল্ডার ডিজাইন প্যাটার্নের একটি প্রয়োগ?


31

"বিল্ডার" প্যাটার্নটি কি "টেলিস্কোপিং কনস্ট্রাক্টর" বিরোধী প্যাটার্নকে সম্বোধন করার মধ্যে সীমাবদ্ধ রয়েছে, বা এটিকে অপরিবর্তনীয় বস্তুগুলির জটিল সৃষ্টির আরও সাধারণ সমস্যার সমাধান করার কথা বলা যেতে পারে?

StringBuilderবর্গ শব্দ "রচয়িতা" তার নাম আছে, কিন্তু এটা কনস্ট্রাকটর telescoping সঙ্গে কিছুই করার আছে, এটা শুধু আমাদের সহায়তা করে সমস্ত ডেটা যে আমরা একটি অপরিবর্তনীয় বস্তুর কন্সট্রাকটর পাস প্রয়োজন সংগ্রহ।

আমার কাছে মনে হচ্ছে উত্তরটি খুব স্পষ্ট "হ্যাঁ", তবে বিষয়টি নিয়ে কিছুটা মতবিরোধ দেখা দিয়েছে, তাই আমি আশাবাদী ছিলাম যে কেউ সম্ভবত এটি পরিষ্কার করতে পারে।

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


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

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

4
আমার এ সম্পর্কে আরও অনেক চিন্তা করা দরকার - এটি আমাকে বিরক্ত করে। আমি প্রায় লিখতে শুরু করেছি কেন স্ট্রিংবিল্ডারের মতো কিছু হ'ল বিল্ডার প্যাটার্নের একটি সংস্করণ এবং অন্য সবাই ভুল ছিল। তবে আমি কয়েকটি দুর্বলতা পেয়েছি, নিজেকে ভুল করে বুঝিয়েছি, তবে তারপরে আমার প্রথম চিন্তা ফিরে পেতে পরিচালিত। আপনি যদি কেবল বিল্ডার প্যাটার্নের অভিপ্রায়টি দেখেন তবে এটি সহজেই বোঝা যায় যে "স্ট্রিংবিল্ডার একজন নির্মাতা"। আপনি যদি বিল্ডার প্যাটার্নের কাঠামোটি দেখেন তবে এটি আরও শক্ত।
টমাস ওয়েন্স

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

2
GoF- র সমস্ত নিদর্শন সময়ের পরীক্ষায় দাঁড়ায় না। আমি নই পারছো, ' আমি শুধু Sayin করছি'।
বেন

উত্তর:


36

StringBuilderএকজন বিল্ডার প্যাটার্নের অনুরূপ, তবে এই নকশার প্যাটার্নের জিওএফ বর্ণনার সাথে খুব বেশি ভাগ করে না। ডিজাইনের প্যাটার্নটির মূল পয়েন্টটি ছিল

একটি জটিল অবজেক্টের নির্মাণকে এর প্রতিনিধিত্ব থেকে পৃথক করুন যাতে একই নির্মাণ প্রক্রিয়াটি বিভিন্ন উপস্থাপনা তৈরি করতে পারে।

- ডিজাইনের প্যাটার্নগুলি থেকে গামা, হেলম, জনসন, ভ্লিসাইডস।

(দ্রষ্টব্য: "জটিল" এর অর্থ মূলত "একাধিক অংশের সমন্বয়ে গঠিত", প্রয়োজনীয়ভাবে "জটিল" বা "কঠিন" নয়)

"বিভিন্ন উপস্থাপনা" এখানে মূল কী। যেমন এই নির্মাণ প্রক্রিয়াটি ধরে নেওয়া:

interface ArticleBuilder {
  void addTitle(String title);
  void addParagraph(String paragraph);
}

void createArticle(ArticeBuilder articleBuilder) {
  articleBuilder.addTitle("Is String Builder an application of ...");
  articleBuilder.addParagraph("Is the Builder Pattern restricted...");
  articleBuilder.addParagraph("The StringBuilder class ...");
}

আমরা কংক্রিট বাস্তবায়ন সরবরাহ করা হয় তার উপর নির্ভর করে আমরা একটি HtmlDocumentবা একটি TexDocumentবা তার সাথে শেষ করতে পারি MarkdownDocument:

class HtmlDocumentBuilder implements ArticleBuilder {
  ...
  HtmlDocument getResult();
}

HtmlDocumentBuilder b = new HtmlDocumentBuilder();
createArticle(b);
HtmlDocument dom = b.getResult();

সুতরাং বিল্ডার প্যাটার্নের একটি কেন্দ্রীয় পয়েন্ট হ'ল বহুমুখীতা । ডিজাইনের প্যাটার্নস বইটি এই প্যাটার্নটিকে অ্যাবস্ট্রাক্ট ফ্যাক্টরীর সাথে তুলনা করে:

অ্যাবস্ট্রাক্ট ফ্যাক্টরি বিল্ডারের অনুরূপ যাতে এটি খুব জটিল বস্তুও তৈরি করতে পারে। প্রাথমিক পার্থক্য হ'ল বিল্ডার প্যাটার্নটি ধাপে ধাপে একটি জটিল অবজেক্ট তৈরির দিকে মনোনিবেশ করে। […] নির্মাতা চূড়ান্ত পদক্ষেপ হিসাবে পণ্যটি ফেরত দেয়, তবে অ্যাবস্ট্রাক্ট ফ্যাক্টরি সম্পর্কিত হিসাবে, পণ্যটি তত্ক্ষণাত্ ফিরে আসে।

- ডিজাইনের প্যাটার্নগুলি থেকে গামা, হেলম, জনসন, ভ্লিসাইডস।

এই ধাপে ধাপে দিকটি পরে বিল্ডার প্যাটার্নের আরও জনপ্রিয় দিক হয়ে উঠেছে, যাতে সাধারণভাবে পার্লারেন্সে বিল্ডার প্যাটার্নটি এইভাবে বোঝা যায়:

কোনও বস্তুর নির্মাণকে একাধিক পদক্ষেপে বিভক্ত করুন। এটি আমাদের নামী যুক্তি বা alচ্ছিক পরামিতি এমনকি এমন ভাষাগুলিতেও ব্যবহার করতে দেয় যা এই বৈশিষ্ট্যগুলিকে সমর্থন করে না।

উইকিপিডিয়া এই ধরণের বর্ণনা দেয়:

বিল্ডার প্যাটার্ন হ'ল একটি অবজেক্ট তৈরি সফ্টওয়্যার ডিজাইনের ধরণ। অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন এবং কারখানার পদ্ধতি প্যাটার্নের বিপরীতে যার উদ্দেশ্য বহুবর্ষ সক্ষম করতে পারে, বিল্ডার প্যাটার্নের উদ্দেশ্যটি দূরবীন নির্মাণকারী বিরোধী-প্যাটার্ন [উদ্ধৃতি আবশ্যক] এর সমাধান খুঁজে বের করা । [...]

বিল্ডার প্যাটার্নটির আরও একটি সুবিধা রয়েছে। এটি ফ্ল্যাট ডেটা (এইচটিএমএল কোড, এসকিউএল কোয়েরি, এক্স.509 শংসাপত্র ...) সম্বলিত অবজেক্টগুলির জন্য ব্যবহার করা যেতে পারে, অর্থাত এটি সহজেই সম্পাদনা করা যায় না এমন ডেটা। এই ধরণের ডেটা ধাপে ধাপে সম্পাদনা করা যায় না এবং একবারে সম্পাদনা করতে হবে। এই জাতীয় কোনও অবজেক্ট তৈরির সর্বোত্তম উপায় হ'ল বিল্ডার শ্রেণি ব্যবহার করা। [হদফ ঘ]

- থেকে নির্মাতা প্যাটার্ন উপর উইকিপিডিয়া , বিভিন্ন অবদানকারী দ্বারা।

সুতরাং আমরা যেমন দেখতে পাচ্ছি, এই নামটি কী ধরণের নাম বোঝায় সে সম্পর্কে সত্যই সাধারণ ধারণা নেই এবং কিছু পয়েন্টে বিভিন্ন সংজ্ঞা এমনকি একে অপরের বিরোধিতা করে (যেমন বিল্ডারদের জন্য পলিমারফিজমের প্রাসঙ্গিকতা সম্পর্কিত)।

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


7
আমার কাছে মনে হয় যে অপরিবর্তনীয় বস্তু তৈরি করা বিল্ডারদের অন্যতম সাধারণ ব্যবহার বলে মনে হয় - আমি মনে করি এটি জিওএফ দ্বারা বর্ণিত প্রাথমিক ব্যবহারকে প্রতিস্থাপন করেছে, তাই সম্মত হন যে এটি অবশ্যই নিদর্শনটির উদাহরণ হিসাবে সবচেয়ে ভাল বর্ণনা করা হয়েছে।
জুলাই

অপরিবর্তনীয় গ্রাফ তৈরিতে ব্যবহারের সাথে একমত, বিল্ডার ডিএসএলগুলির জন্য আরেকটি ইউজকেস ইউনিট + ইন্টিগ্রেশন টেস্টিংয়ের সময় ভুয়া তথ্য / অবজেক্টমাদারের বৃহত গ্রাফ তৈরির জন্য সত্যই কার্যকর।
স্টুয়ার্টএলসি
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.