4.1 নির্মাতা
বিল্ডার হল একটি জেনারেটিভ ডিজাইন প্যাটার্ন যা একটি যৌগিক বস্তু তৈরি করার উপায় প্রদান করে।
একটি জটিল বস্তুর নির্মাণকে তার উপস্থাপনা থেকে পৃথক করে যাতে একই নির্মাণ প্রক্রিয়ার ফলে বিভিন্ন উপস্থাপনা হতে পারে।
![নির্মাতা](https://cdn.codegym.cc/images/article/73f76c69-6b2a-4034-9207-93871bb16fae/800.jpeg)
শক্তি:
- আপনাকে পণ্যের অভ্যন্তরীণ উপস্থাপনা পরিবর্তন করতে দেয়;
- কোড বিচ্ছিন্ন করে যা নির্মাণ এবং উপস্থাপনা প্রয়োগ করে;
- নকশা প্রক্রিয়ার উপর সূক্ষ্ম নিয়ন্ত্রণ দেয়।
দুর্বল দিক:
- একটি জটিল বস্তু তৈরির জন্য অ্যালগরিদম অবজেক্টের কোন অংশগুলি নিয়ে গঠিত এবং কীভাবে তারা একসাথে ফিট করে তার উপর নির্ভর করে না;
- নির্মাণ প্রক্রিয়া অবশ্যই নির্মাণ করা বস্তুর বিভিন্ন উপস্থাপনা প্রদান করবে।
একটি ভাল উদাহরণ হল HttpRequest ক্লাস, যার একটি সাবক্লাস HttpRequest.Builder রয়েছে যা HttpRequest ক্লাসের উদাহরণ তৈরি করতে এবং সেগুলি বৈধ কিনা তা নিশ্চিত করতে ব্যবহার করা যেতে পারে।
4.2 অলস সূচনা
ল্যাজি ইনিশিয়ালাইজেশন হল একটি প্রোগ্রামিং কৌশল যখন কিছু রিসোর্স-ইনটেনসিভ অপারেশন (বস্তু তৈরি, মান গণনা) করা হয় তার ফলাফল ব্যবহারের আগে।
এইভাবে, প্রারম্ভিকতা "চাহিদা অনুযায়ী" সঞ্চালিত হয়, এবং অগ্রিম নয়। একটি অনুরূপ ধারণা বিভিন্ন ক্ষেত্রে প্রয়োগ খুঁজে পায়: উদাহরণস্বরূপ, অন-দ্য-ফ্লাই সংকলন এবং জাস্ট-ইন-টাইম লজিস্টিক ধারণা।
![অলস সূচনা](https://cdn.codegym.cc/images/article/fa045df5-58b9-4433-bc35-45548f452406/800.jpeg)
অলস প্রারম্ভিকতার একটি বিশেষ ক্ষেত্রে - এটি অ্যাক্সেস করার সময় একটি বস্তু তৈরি করা - এটি একটি উৎপাদক নকশার ধরণগুলির মধ্যে একটি। এটি সাধারণত ফ্যাক্টরি মেথড, লোনার এবং প্রক্সির মতো প্যাটার্নের সাথে ব্যবহার করা হয়।
শক্তি:
- সূচনা শুধুমাত্র যখন এটি সত্যিই প্রয়োজন সঞ্চালিত হয়;
- আবেদনের প্রাথমিক সূচনা ত্বরান্বিত হয়: যা কিছু স্থগিত করা যেতে পারে তা স্থগিত করা হয়।
দুর্বল দিক:
- বস্তুগুলি যে ক্রমানুসারে শুরু করা হয় তা স্পষ্টভাবে সেট করা সম্ভব নয়;
- অবজেক্টে প্রথম অ্যাক্সেসে বিলম্ব হয়, যা সমান্তরালভাবে অন্য সম্পদ-নিবিড় ক্রিয়াকলাপ সঞ্চালিত হলে সমালোচনামূলক হতে পারে। এই কারণে, মাল্টিথ্রেডেড সফ্টওয়্যার সিস্টেমে অলস প্রারম্ভিকতা ব্যবহার করার উপযুক্ততা সাবধানে বিবেচনা করা প্রয়োজন।
মনে রাখবেন কিভাবে web.xml লেখার সময় আপনি সেখানে সার্লেটের শুরুর ক্রম নির্দিষ্ট করতে পারেন? এটি ঠিক অলস লোডিংয়ের ফলাফল। টমক্যাট সার্লেট অবজেক্ট তৈরি করবে যখন তারা প্রথমবার অ্যাক্সেস করবে।
4.3 অবজেক্ট পুল
একটি অবজেক্ট পুল হল একটি প্যারেন্ট ডিজাইন প্যাটার্ন, আরম্ভ করা এবং ব্যবহারের জন্য প্রস্তুত বস্তুর একটি সেট। যখন সিস্টেমের একটি বস্তুর প্রয়োজন হয়, এটি তৈরি করা হয় না, তবে পুল থেকে নেওয়া হয়। যখন একটি বস্তুর আর প্রয়োজন হয় না, তখন এটি ধ্বংস হয় না বরং পুলে ফিরে আসে।
![বস্তু পুল](https://cdn.codegym.cc/images/article/780f7d14-5ad3-42e2-bbfe-409cef49851e/512.jpeg)
কাজের শুরুতে একটি বস্তু তৈরি করার সময় কর্মক্ষমতা উন্নত করতে অবজেক্ট পুলিং ব্যবহার করা হয় এবং শেষে এটিকে ধ্বংস করা ব্যয়বহুল। কার্যক্ষমতার উন্নতি বিশেষভাবে লক্ষণীয় হয় যখন বস্তুগুলি ঘন ঘন তৈরি এবং ধ্বংস করা হয়, কিন্তু তাদের মধ্যে শুধুমাত্র অল্প সংখ্যক একই সময়ে বিদ্যমান।
একটি বস্তু পুল দরকারী যখন একটি বস্তু মেমরি ছাড়া অন্য সম্পদের মালিক, যেমন নেটওয়ার্ক সকেট। অথবা যদি বস্তুর সংগ্রহ কম্পিউটারের মেমরির একটি উল্লেখযোগ্য অংশ গ্রহণ করে এবং প্রচুর "আবর্জনা" তৈরি হয়।
আপনার মনে আছে, টমক্যাট প্রতিটি অনুরোধ একটি পৃথক থ্রেডে কার্যকর করে। তবে থ্রেডগুলি প্রতিবার নতুন করে তৈরি করা হয় না, তবে থ্রেড পুলে সংরক্ষণ করা হয়। এটি অনুরোধগুলির দ্রুত সম্পাদনের অনুমতি দেয়: যখন একটি থ্রেড প্রয়োজন হয়, তখন এটি কেবল পুল থেকে নেওয়া হয়। যাইহোক, প্রশ্ন হল: আপনি কীভাবে চলমান থ্রেডটি পুলের মধ্যে রাখবেন এবং পুল থেকে এটি নিয়ে যাবেন?