বিল্ডার ডিজাইন প্যাটার্ন এবং কারখানার নকশার প্যাটার্নের মধ্যে পার্থক্য কী?
কোনটি বেশি সুবিধাজনক এবং কেন?
আমি যদি এই নিদর্শনগুলি পরীক্ষা এবং তুলনা / তুলনা করতে চাই তবে আমি কীভাবে আমার অনুসন্ধানগুলি গ্রাফ হিসাবে উপস্থাপন করব?
বিল্ডার ডিজাইন প্যাটার্ন এবং কারখানার নকশার প্যাটার্নের মধ্যে পার্থক্য কী?
কোনটি বেশি সুবিধাজনক এবং কেন?
আমি যদি এই নিদর্শনগুলি পরীক্ষা এবং তুলনা / তুলনা করতে চাই তবে আমি কীভাবে আমার অনুসন্ধানগুলি গ্রাফ হিসাবে উপস্থাপন করব?
উত্তর:
নকশার নিদর্শনগুলির সাথে, সাধারণত কোনও "বেশি সুবিধাজনক" সমাধান পাওয়া যায় না যা সমস্ত ক্ষেত্রে কার্যকর হয়। এটি আপনার বাস্তবায়নের জন্য নির্ভর করে।
উইকিপিডিয়া থেকে:
- নির্মাতা ধাপে ধাপে একটি জটিল অবজেক্ট তৈরির দিকে মনোনিবেশ করে। অ্যাবস্ট্রাক্ট ফ্যাক্টরি পণ্য সামগ্রীর একটি পরিবারকে জোর দেয় (সহজ সরল বা জটিল)। নির্মাতা একটি চূড়ান্ত পদক্ষেপ হিসাবে পণ্যটি ফেরত দেয় তবে অ্যাবস্ট্রাক্ট ফ্যাক্টরির সাথে সম্পর্কিত হিসাবে পণ্যটি তত্ক্ষণাত্ ফিরে আসে।
- নির্মাতা প্রায়শই একটি সংমিশ্রণ তৈরি করে।
- প্রায়শই ডিজাইনগুলি ফ্যাক্টরি পদ্ধতিটি (কম জটিল, আরও কাস্টমাইজযোগ্য, সাবক্লাস প্রলাইফ্রেট) ব্যবহার করে শুরু হয় এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরি, প্রোটোটাইপ বা বিল্ডারের দিকে বিকশিত হন কারণ ডিজাইনার আবিষ্কার করেন যেখানে আরও নমনীয়তা প্রয়োজন।
- কখনও কখনও সৃষ্টিশীল নিদর্শন পরিপূরক হয়: কোন উপাদানগুলি তৈরি হয় তা প্রয়োগ করতে নির্মাতা অন্য একটি নিদর্শন ব্যবহার করতে পারেন। বিমূর্ত কারখানা, নির্মাতা এবং প্রোটোটাইপ তাদের বাস্তবায়নে সিঙ্গলটন ব্যবহার করতে পারে।
কারখানার নকশা প্যাটার্নের জন্য উইকিপিডিয়া এন্ট্রি: http://en.wikedia.org/wiki/Factory_method_ Pattern
বিল্ডার ডিজাইন প্যাটার্নের জন্য উইকিপিডিয়া প্রবেশ: http://en.wikedia.org/wiki/Builder_ Pattern pat
একটি কারখানাটি কেবল কোনও নির্মাণকারীর চারপাশে মোড়ক ফাংশন (সম্ভবত ভিন্ন শ্রেণীর একটি)। মূল পার্থক্যটি হ'ল একটি ফ্যাক্টরি পদ্ধতির প্যাটার্নটির জন্য সমস্ত পরামিতি একক লাইনে প্রবেশ করে সম্পূর্ণ একক পদ্ধতিতে কল করা উচিত। চূড়ান্ত বস্তুটি ফিরে আসবে।
অন্যদিকে, একটি বিল্ডার প্যাটার্নটি হ'ল সংক্ষিপ্ত আকারে আপনি সম্ভাব্য সমস্ত প্যারামিটারগুলির চারপাশে একটি র্যাপার অবজেক্টটি নির্মাতাকে ডাকে পারেন। এটি আপনাকে প্যারামিটারের তালিকাটি ধীরে ধীরে তৈরি করতে সেটার পদ্ধতিগুলি ব্যবহার করতে দেয়। বিল্ডার শ্রেণিতে একটি অতিরিক্ত পদ্ধতি হ'ল বিল্ড () পদ্ধতি, যা কেবল নির্মাতা অবজেক্টটিকে পছন্দসই কনস্ট্রাক্টরে পাস করে এবং ফলাফলটি ফেরত দেয়।
জাভার মতো স্থির ভাষায়, আপনার কাছে মুষ্টিমেয় (সম্ভাব্য optionচ্ছিক) প্যারামিটারের বেশি হওয়ার পরে এটি আরও গুরুত্বপূর্ণ হয়ে ওঠে, কারণ প্যারামিটারগুলির সমস্ত সম্ভাব্য সংমিশ্রণের জন্য টেলিস্কোপিক নির্মাণকারী প্রয়োজনীয়তা এড়ানো হয়। এছাড়াও একজন নির্মাতা আপনাকে কেবল পঠনযোগ্য বা ব্যক্তিগত ক্ষেত্রগুলি নির্ধারণের জন্য সেটার পদ্ধতিগুলি ব্যবহার করতে পারবেন যা কনস্ট্রাক্টর ডেকে যাওয়ার পরে সরাসরি সংশোধন করা যায় না।
বেসিক কারখানার উদাহরণ
// Factory
static class FruitFactory {
static Fruit create(name, color, firmness) {
// Additional logic
return new Fruit(name, color, firmness);
}
}
// Usage
Fruit fruit = FruitFactory.create("apple", "red", "crunchy");
বেসিক বিল্ডার উদাহরণ
// Builder
class FruitBuilder {
String name, color, firmness;
FruitBuilder setName(name) { this.name = name; return this; }
FruitBuilder setColor(color) { this.color = color; return this; }
FruitBuilder setFirmness(firmness) { this.firmness = firmness; return this; }
Fruit build() {
return new Fruit(this); // Pass in the builder
}
}
// Usage
Fruit fruit = new FruitBuilder()
.setName("apple")
.setColor("red")
.setFirmness("crunchy")
.build();
এই দুটি উইকিপিডিয়া পৃষ্ঠা থেকে কোডের নমুনাগুলির তুলনায় এটি মূল্যবান হতে পারে:
http://en.wikedia.org/wiki/Factory_method_ Pattern http://en.wikedia.org/wiki/
বিল্ডার_প্যাটার্ন
কারখানার প্যাটার্নটি প্রায় নির্মাতার প্যাটার্নের সরলিকৃত সংস্করণ হিসাবে দেখা যেতে পারে।
ইন কারখানার প্যাটার্ন, কারখানা চাহিদার উপর নির্ভর করে একটি বস্তুর বিভিন্ন উপশাখাকে তৈরি দায়িত্বে।
কারখানা পদ্ধতির ব্যবহারকারীর that বস্তুর সঠিক উপপ্রকারটি জানতে হবে না। কারখানার পদ্ধতির উদাহরণ createCarকোনও Fordবা কোনও Hondaটাইপযুক্ত বস্তুটি ফিরিয়ে দিতে পারে ।
ইন নির্মাতা প্যাটার্ন, বিভিন্ন উপশাখাকে একটি রচয়িতা পদ্ধতি দ্বারা নির্মিত কিন্তু বস্তুর রচনা একই উপশ্রেণী মধ্যে পৃথক হতে পারে।
গাড়ির উদাহরণটি চালিয়ে যেতে আপনার কাছে একটি createCarবিল্ডার পদ্ধতি থাকতে পারে যা Hondaএকটি 4 সিলিন্ডার ইঞ্জিন সহ একটি টাইপযুক্ত অবজেক্ট তৈরি করে বা Honda6 সিলিন্ডারযুক্ত একটি টাইপযুক্ত বস্তু তৈরি করে। বিল্ডার প্যাটার্ন এই সূক্ষ্ম গ্রানুলারিটির জন্য অনুমতি দেয়।
বিল্ডার প্যাটার্ন এবং কারখানা পদ্ধতির প্যাটার্ন উভয়ের চিত্র চিত্র উইকিপিডিয়ায় উপলব্ধ।
বিল্ডার ডিজাইন প্যাটার্ন এমন একটি অবজেক্টের বর্ণনা দেয় যা বিভিন্ন ধাপে নির্দিষ্ট ধরণের অন্য কোনও অবজেক্টকে কীভাবে রচনা করতে হয় তা জানে। এটি প্রতিটি মধ্যবর্তী পদক্ষেপে লক্ষ্য আইটেমটির জন্য প্রয়োজনীয় রাষ্ট্র ধারণ করে। একটি স্ট্রিংবিল্ডার একটি চূড়ান্ত স্ট্রিং উত্পাদন করতে যা যা তা ভেবে দেখুন।
কারখানার নকশার ধরণটি এমন একটি অবজেক্টের বর্ণনা দেয় যা কীভাবে এক ধাপে বিভিন্ন ধরণের বিভিন্ন সম্পর্কিত তবে সম্পর্কিত ধরণের অবজেক্ট তৈরি করতে জানে, যেখানে প্রদত্ত প্যারামিটারের ভিত্তিতে নির্দিষ্ট প্রকারটি বেছে নেওয়া হয়। সিরিয়ালাইজেশন সিস্টেমটির কথা চিন্তা করুন, যেখানে আপনি নিজের সিরিয়ালাইজার তৈরি করেন এবং এটি সমস্ত লোড কলের মাধ্যমে বস্তুটিতে কাঙ্ক্ষিত গঠন করে।
পদক্ষেপে একটি জটিল অবজেক্ট তৈরি করা: বিল্ডার প্যাটার্ন
একটি একক পদ্ধতি ব্যবহার করে একটি সাধারণ অবজেক্ট তৈরি করা হয়: কারখানার পদ্ধতি প্যাটার্ন
একাধিক কারখানা পদ্ধতি ব্যবহার করে অবজেক্ট তৈরি করা: বিমূর্ত কারখানার প্যাটার্ন
বিল্ডার প্যাটার্ন এবং কারখানার প্যাটার্ন, উভয়ই নগ্ন চোখের সাথে বেশ মিল বলে মনে হচ্ছে কারণ তারা উভয়ই আপনার জন্য বস্তু তৈরি করে।
বাস্তব জীবনের এই উদাহরণটি দু'জনের মধ্যে পার্থক্যকে আরও স্পষ্ট করে তুলবে।
মনে করুন, আপনি একটি ফাস্ট ফুড রেস্তোঁরাে গিয়েছিলেন এবং আপনি খাবারের অর্ডার দিয়েছিলেন ।
পিজা
ক্যাপসিকাম, টমেটো, বিবিকিউ মুরগি, কোনও PINEAPPLE
তাই বিভিন্ন ধরণের খাবারগুলি কারখানার প্যাটার্ন দ্বারা তৈরি করা হয় তবে নির্দিষ্ট খাবারের বিভিন্ন রূপ (স্বাদ) বিল্ডার প্যাটার্ন দ্বারা তৈরি হয়।
বিভিন্ন ধরণের খাবার
পিজা, বার্গার, পাস্তা
পিজ্জার বিভিন্ন রূপ
কেবল পনির, পনির + টমেটো + ক্যাপসিকাম, পনির + টমেটো ইত্যাদি
আপনি এখানে উভয় নিদর্শনগুলির নমুনা কোড প্রয়োগ দেখতে পাচ্ছেন
বিল্ডার প্যাটার্ন
ফ্যাক্টরি প্যাটার্ন
উভয়ই ক্রিয়েটিয়াল নিদর্শন, অবজেক্ট তৈরি করতে।
1) কারখানার প্যাটার্ন - ধরুন, আপনার কাছে একটি সুপার ক্লাস এবং এন নম্বর সাব ক্লাস রয়েছে। কোন পরামিতি / মানটি পাস হবে তার উপর নির্ভর করে অবজেক্টটি তৈরি করা হয়।
2) নির্মাতা প্যাটার্ন - জটিল বস্তু তৈরি করতে।
Ex: Make a Loan Object. Loan could be house loan, car loan ,
education loan ..etc. Each loan will have different interest rate, amount ,
duration ...etc. Finally a complex object created through step by step process.
আমার যুক্তি অনুসরণ করার জন্য প্রথমে কিছু সাধারণ বিষয়:
বড় সফ্টওয়্যার সিস্টেমগুলি ডিজাইনের মূল চ্যালেঞ্জ হ'ল তারা পরিবর্তন করতে নমনীয় এবং জটিল হতে হবে। এই কারণে, সংযুক্তি এবং সংহতির মতো কিছু মেট্রিক রয়েছে। স্ক্র্যাচ থেকে পুরো সিস্টেমটিকে নতুন করে ডিজাইনের প্রয়োজন ছাড়াই সহজেই তার কার্যকারিতাটিতে পরিবর্তন বা প্রসারিত করা যায় এমন সিস্টেমগুলি অর্জন করতে, আপনি নকশার নীতিগুলি অনুসরণ করতে পারেন (যেমন সোলিড ইত্যাদি)। কিছুক্ষণ পরে কিছু বিকাশকারী স্বীকার করলেন যে তারা যদি এই নীতিগুলি অনুসরণ করেন তবে একই ধরণের কিছু সমাধান রয়েছে যা একই ধরণের সমস্যার সাথে ভালভাবে কাজ করেছিল। এই মানক সমাধানগুলি নকশার নিদর্শন হিসাবে প্রমাণিত হয়েছিল।
সুতরাং নকশার নিদর্শনগুলি আপনাকে উচ্চ সংহতি সহ আলগাভাবে সংযুক্ত সিস্টেমগুলি অর্জন করার জন্য সাধারণ নকশা নীতি অনুসরণ করতে সহায়তা করে to
প্রশ্নের উত্তর:
দুটি নিদর্শনগুলির মধ্যে পার্থক্য জিজ্ঞাসা করে আপনাকে নিজেকে জিজ্ঞাসা করতে হবে কোন প্যাটার্নটি আপনার সিস্টেমকে কোন পদ্ধতিতে আরও নমনীয় করে তোলে। আপনার সিস্টেমে শ্রেণীর মধ্যে নির্ভরতাগুলি সংগঠিত করার জন্য প্রতিটি প্যাটার্নের নিজস্ব উদ্দেশ্য রয়েছে।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন: জিওএফ: "সম্পর্কিত বা নির্ভরশীল জিনিসের পরিবারগুলি তাদের কংক্রিটের ক্লাস নির্দিষ্ট না করে তৈরি করার জন্য একটি ইন্টারফেস সরবরাহ করুন।"
এর অর্থ কী: পরিবারের প্রতিটি পণ্যের কন্সট্রাক্টরের কাছে কলটির মত ইন্টারফেস সরবরাহ করে কারখানা শ্রেণিতে আবদ্ধ হয়। এবং আপনার সমগ্র সিস্টেমে এটিই একমাত্র জায়গা যেখানে those নির্মাণকারীদের বলা হয় আপনি একটি নতুন কারখানার শ্রেণি প্রয়োগ করে আপনার সিস্টেমকে পরিবর্তন করতে পারবেন। আপনি যদি কারখানার প্রতিনিধিত্বের মাধ্যমে অন্যের মাধ্যমে বিনিময় করেন, আপনি আপনার কোডের সিংহভাগকে স্পর্শ না করেই পুরো সেট পণ্যগুলি বিনিময় করতে পারেন।
বিল্ডার প্যাটার্ন: জিওএফ: "কোনও জটিল বিষয়টির নির্মাণকে তার প্রতিনিধিত্ব থেকে পৃথক করুন যাতে একই নির্মাণ প্রক্রিয়াটি বিভিন্ন উপস্থাপনা তৈরি করতে পারে।"
এর অর্থ কী: আপনি পরিচালক (জিওএফ) নামে পরিচিত অন্য একটি ক্লাসে নির্মাণের প্রক্রিয়াটি সজ্জিত করেন। এই পরিচালকটিতে পণ্যটির নতুন দৃষ্টান্ত তৈরি করার অ্যালগরিদম রয়েছে (উদাহরণস্বরূপ, অন্যান্য অংশগুলির চেয়ে জটিল পণ্য রচনা করুন)। পুরো পণ্যটির অবিচ্ছেদ্য অংশগুলি তৈরি করতে পরিচালক কোনও বিল্ডার ব্যবহার করেন। পরিচালকের মধ্যে নির্মাতাকে বিনিময় করে আপনি পণ্যটি তৈরি করতে একই অ্যালগরিদম ব্যবহার করতে পারেন, তবে একক অংশের উপস্থাপনা (এবং তাই পণ্যটির উপস্থাপনা) পরিবর্তন করতে পারেন। পণ্যটির উপস্থাপনে আপনার সিস্টেমকে প্রসারিত বা সংশোধন করতে আপনাকে যা করতে হবে তা হল একটি নতুন নির্মাতা শ্রেণি প্রয়োগ করা।
সুতরাং সংক্ষেপে: অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের উদ্দেশ্য হ'ল একসাথে ব্যবহারের জন্য তৈরি পণ্যগুলির একটি সেট বিনিময় করা। বিল্ডার প্যাটার্নটির উদ্দেশ্য হল পণ্যটি বিভিন্ন উপস্থাপনের জন্য পুনরায় ব্যবহার করার জন্য একটি পণ্য তৈরির বিমূর্ত আলগোরিদিমকে সজ্জিত করা।
আমার মতে আপনি বলতে পারবেন না যে অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নটি বিল্ডার প্যাটার্নের বড় ভাই big হ্যাঁ, এগুলি উভয়ই সৃষ্টিশীল নিদর্শন, তবে নিদর্শনগুলির মূল উদ্দেশ্য সম্পূর্ণ আলাদা।
বিল্ডার এবং কারখানার মধ্যে একটি উল্লেখযোগ্য পার্থক্য যা আমি তৈরি করতে পারি তা হ'ল নিম্নরূপ
ধরুন আমাদের একটা গাড়ি আছে
class Car
{
bool HasGPS;
bool IsCityCar;
bool IsSportsCar;
int Cylenders;
int Seats;
public:
void Car(bool hasGPs=false,bool IsCityCar=false,bool IsSportsCar=false, int Cylender=2, int Seats=4);
};
উপরের ইন্টারফেসে আমরা নিম্নলিখিত উপায়ে গাড়ি পেতে পারি:
int main()
{
BadCar = new Car(false,false,true,4,4);
}
তবে সিট তৈরির সময় যদি কিছু ব্যতিক্রম ঘটে তবে কি হবে ??? আপনি সমস্ত // বাজেট পাবেন না কিন্তু
ধরুন আপনার নীচের মতো বাস্তবায়ন রয়েছে
class Car
{
bool mHasGPS;
bool mIsCityCar;
bool mIsSportsCar;
int mCylenders;
int mSeats;
public:
void Car() : mHasGPs(false), mIsCityCar(false), mIsSportsCar(false), mCylender(2), mSeats(4) {}
void SetGPS(bool hasGPs=false) {mHasGPs = hasGPs;}
void SetCity(bool CityCar) {mIsCityCar = CityCar;}
void SetSports(bool SportsCar) {mIsSportsCar = SportsCar;}
void SetCylender(int Cylender) {mCylenders = Cylender;}
void SetSeats(int seat) {mSeats = seat;}
};
class CarBuilder
{
Car* mCar;
public:
CarBuilder():mCar(NULL) { mCar* = new Car(); }
~CarBuilder() { if(mCar) { delete mCar; }
Car* GetCar() { return mCar; mCar=new Car(); }
CarBuilder* SetSeats(int n) { mCar->SetSeats(n); return this; }
CarBuilder* SetCylender(int n) { mCar->SetCylender(n); return this; }
CarBuilder* SetSports(bool val) { mCar->SetSports(val); return this; }
CarBuilder* SetCity(bool val) { mCar->SetCity(val); return this; }
CarBuilder* SetGPS(bool val) { mCar->SetGPS(val); return this; }
}
এখন আপনি এটি তৈরি করতে পারেন
int main()
{
CarBuilder* bp =new CarBuilder;
Car* NewCar = bp->SetSeats(4)->SetSports(4)->SetCity(ture)->SetGPS(false)->SetSports(true)->GetCar();
bp->SetSeats(2);
bp->SetSports(4);
bp->SetCity(ture);
bp->SetSports(true)
Car* Car_II= bp->GetCar();
}
এখানে দ্বিতীয় ক্ষেত্রে, একটি অপারেশন ব্যর্থ হলেও আপনি গাড়িটি পাবেন would
হতে পারে যে গাড়িটি পরে পুরোপুরি কাজ করে না তবে, আপনার উদ্দেশ্য হবে।
কারণ কারখানার পদ্ধতি আপনাকে একক কলে গাড়ি দেয়, যেখানে নির্মাতা একে একে তৈরি করে।
যদিও, এটি কোনটির জন্য যেতে হবে সেই মর্যাদার প্রয়োজনের উপর নির্ভর করে।
+-------------------------------------------------------------------+---------------------------------------------------+
| Builder | Factory |
+-------------------------------------------------------------------+---------------------------------------------------+
| Return only single instance to handle complex object construction | Retrun various instances on multiple constructors |
| No interface required | Interface driven |
| Inner classes is involved (to avoid telescopic constructors) | Subclasses are involved |
+-------------------------------------------------------------------+---------------------------------------------------+
টেলিস্কোপিং কনস্ট্রাক্টর প্যাটার্ন
সাদৃশ্য:
নির্মাতা এবং বিমূর্ত কারখানা বিভিন্ন উদ্দেশ্যে বোঝানো হয়েছে। সঠিক ব্যবহারের ক্ষেত্রে উপর নির্ভর করে, আপনাকে উপযুক্ত নকশার প্যাটার্ন নির্বাচন করতে হবে।
নির্মাতাদের প্রধান বৈশিষ্ট্য:
কারখানা (সাধারণ কারখানা) প্রধান বৈশিষ্ট্য:
প্রায়শই, ডিজাইনগুলি কারখানা পদ্ধতি ব্যবহার করে শুরু হয় (কম জটিল, আরও কাস্টমাইজযোগ্য, উপশ্রেণীর প্রসারিত) এবং অ্যাবস্ট্রাক্ট ফ্যাক্টরি , প্রোটোটাইপ বা বিল্ডারের দিকে বিকশিত হয় (আরও নমনীয়, আরও জটিল)
সম্পর্কিত পোস্টগুলি দেখুন:
নির্মাতাকে আলাদা শ্রেণিতে রাখা (সাবলীল ইন্টারফেস)
নকশার প্যাটার্নস: ফ্যাক্টরী বনাম কারখানা পদ্ধতি বনাম বিমূর্ত কারখানা
আরও তথ্যের জন্য আপনি নীচের নিবন্ধগুলি পড়তে পারেন:
কারখানা : কোনও বস্তুর উদাহরণ তৈরি করার জন্য ব্যবহৃত হয় যেখানে বস্তুর নির্ভরতা পুরোপুরি কারখানার অধীনে থাকে। জন্য বিমূর্ত কারখানা প্যাটার্ন , সেখানে প্রায়ই একই বিমূর্ত কারখানার অনেক কংক্রিট বাস্তবায়নের হয়। কারখানার সঠিক প্রয়োগটি নির্ভরতা ইনজেকশনের মাধ্যমে ইনজেক্ট করা হয়।
নির্মাতা : অপরিবর্তনীয় বস্তুগুলি তৈরি করতে ব্যবহৃত হয় , যখন অবজেক্টের অবজেক্টের নির্ভরতা আংশিকভাবে আগে থেকেই জানা যায় এবং আংশিকভাবে বিল্ডারের ক্লায়েন্ট দ্বারা সরবরাহ করা হয়।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি এবং বিল্ডার প্যাটার্ন উভয়ই ক্রিয়েটিভ নিদর্শন তবে ভিন্ন উদ্দেশ্য সহ।
অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন সম্পর্কিত বস্তুর পরিবারগুলির জন্য অবজেক্ট তৈরির উপর জোর দেয় যেখানে:
বিল্ডার প্যাটার্নটি ধাপে ধাপে একটি জটিল অবজেক্ট তৈরির দিকে মনোনিবেশ করে। এটি জটিল অবজেক্ট নির্মাণের প্রক্রিয়া থেকে উপস্থাপনাটিকে ডিউপল করে, যাতে একই নির্মাণ প্রক্রিয়াটি বিভিন্ন উপস্থাপনের জন্য ব্যবহার করা যায়।
একটি জটিল নির্মাণ হ'ল যখন নির্মাণ করা বস্তুটি বিভিন্ন অন্যান্য অবজেক্টের সমন্বয়ে গঠিত হয় যা বিমূর্ততা দ্বারা প্রতিনিধিত্ব করা হয়।
ম্যাকডোনাল্ডসের একটি মেনু বিবেচনা করুন। একটি মেনুতে একটি পানীয়, একটি প্রধান এবং একটি অংশ থাকে। স্বতন্ত্র বিমূর্তির কোন বংশধর একসাথে রচিত, তার উপর নির্ভর করে তৈরি মেনুটির আরও একটি উপস্থাপনা রয়েছে।
সেখানে, আমরা বিভিন্ন উপস্থাপনা সহ মেনুটির দুটি উদাহরণ পেয়েছি। পরিবর্তে নির্মাণের প্রক্রিয়া একই থাকে। আপনি একটি পানীয়, একটি প্রধান এবং একটি পাশ দিয়ে একটি মেনু তৈরি করেন।
বিল্ডার প্যাটার্নটি ব্যবহার করে, আপনি এটি তৈরিতে ব্যবহৃত বিভিন্ন উপাদান থেকে একটি জটিল অবজেক্ট তৈরির অ্যালগরিদমকে আলাদা করেন।
বিল্ডার প্যাটার্নের বিবেচনায়, অ্যালগরিদমটি পরিচালককে এনক্যাপসুলেটেড হয় যেখানে বিল্ডারগুলি অবিচ্ছেদ্য অংশগুলি তৈরি করতে ব্যবহৃত হয়। পরিচালকের অ্যালগরিদমে ব্যবহৃত বিল্ডারকে বৈচিত্র্যকরণের ফলে আলাদা প্রতিনিধিত্ব হয় কারণ অন্যান্য অংশগুলি মেনুতে রচিত। একটি মেনু তৈরি করার পদ্ধতি একই থাকে।
তাদের মধ্যে প্রধান পার্থক্য হ'ল বিল্ডার প্যাটার্নটি প্রাথমিকভাবে ধাপে ধাপে জটিল বস্তুগুলির সৃষ্টি বর্ণনা করে। অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নে, বস্তু-পণ্যগুলির পরিবারগুলিতে জোর দেওয়া হয় । নির্মাতা শেষ পদক্ষেপে পণ্যটি ফেরত দেয় । অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নে থাকা অবস্থায় পণ্যটি তাত্ক্ষণিকভাবে উপলব্ধ ।
উদাহরণ: ধরুন যে আমরা ধাঁধা তৈরি করছি
1. বিমূর্ত কারখানা:
Maze* MazeGame::CreateMaze (MazeFactory& factory) {
Maze* maze = factory.MakeMaze(); /// product is available at start!!
/* Call some methods on maze */
return maze;
}
2. নির্মাতা:
Maze* MazeGame::CreateMaze (MazeBuilder& builder) {
builder.buildMaze(); /// We don't have access to maze
/* Call some methods on builder */
return builder.GetMaze();
}
আমি বিশ্বাস করি, আপনি একই কোড বেস এবং পরিবর্তনের প্রয়োজনীয়তার উপর যেমন কাজ করেছেন তেমন নির্দিষ্ট সময়ের মধ্যে কারখানা ও বিল্ডার নিদর্শনগুলির ব্যবহার এবং পার্থক্য বোঝা / পরিষ্কার করা যেতে পারে।
আমার অভিজ্ঞতা থেকে, সাধারণত, আপনি প্রাথমিকভাবে তুলনামূলকভাবে জটিল আরম্ভের যুক্তি লুকাতে কয়েকটি স্থিতিশীল স্রষ্টার পদ্ধতি সহ কারখানার প্যাটার্ন দিয়ে শুরু করেন। আপনার অবজেক্টের স্তরক্রমটি আরও জটিল হয়ে উঠার সাথে সাথে (বা আপনি আরও ধরণের পরামিতি যুক্ত করার সাথে সাথে) আপনার পদ্ধতিগুলি আরও পরামিতিগুলির সাথে সমৃদ্ধ করে এবং আপনার কারখানার মডিউলটি পুনরায় সংকলন করতে হবে বলে উল্লেখ না করেই শেষ করবেন। এই সমস্ত জিনিসগুলি, আপনার স্রষ্টার পদ্ধতির জটিলতা বাড়িয়ে তোলে, পাঠযোগ্যতা হ্রাস করে এবং সৃষ্টি মডিউলটিকে আরও ভঙ্গুর করে তোলে।
এই পয়েন্টটি সম্ভবত স্থানান্তর / এক্সটেনশন পয়েন্ট হবে। এটি করে, আপনি নির্মাণ পরামিতিগুলির চারপাশে একটি মোড়ক মডিউল তৈরি করেন এবং তারপরে আপনি প্রকৃত আপনার যুক্তি স্পর্শ না করে আরও কিছু বিমূর্ততা (সম্ভবত) এবং প্রয়োগগুলি যুক্ত করে নতুন (অনুরূপ) অবজেক্টগুলিকে উপস্থাপন করতে সক্ষম হবেন। সুতরাং আপনার "কম" জটিল যুক্তি ছিল।
স্পষ্টতই, "এক-ধাপে বা একাধিক পদক্ষেপে কোনও বস্তু তৈরি করা হ'ল পার্থক্য" এমন কোনও ধরণের বিষয় উল্লেখ করা কারণ একক বৈচিত্র্যের কারণটি আমার পক্ষে তাদের পার্থক্য করার পক্ষে যথেষ্ট ছিল না যেহেতু আমি যে সমস্ত মুখোমুখি হয়েছি সেগুলির জন্য আমি উভয় উপায়ে ব্যবহার করতে পারি since এখন কোন সুবিধা অনুভব না করে। সুতরাং এই আমি অবশেষে এটি সম্পর্কে চিন্তা করেছি।
কারখানার প্যাটার্নের তুলনায় বিল্ডার প্যাটার্নের প্রধান সুবিধাটি যদি আপনি প্রচুর সম্ভাব্য কাস্টমাইজেশন দিয়ে কিছু স্ট্যান্ডার্ড অবজেক্ট তৈরি করতে চান তবে আপনি সাধারণত কয়েকটিকে কাস্টমাইজ করতে পারেন।
উদাহরণস্বরূপ, আপনি যদি এইচটিটিপি ক্লায়েন্ট লিখতে চান - আপনি কিছু ডিফল্ট প্যারামিটার সেট আপ করবেন যেমন ডিফল্ট রাইটিং / রিড টাইমআউট, প্রোটোকল, ক্যাশে, ডিএনএস, ইন্টারসেপ্টর ইত্যাদি set
আপনার ক্লায়েন্টের বেশিরভাগ ব্যবহারকারী কেবলমাত্র সেই ডিফল্ট প্যারামিটারগুলি ব্যবহার করবেন, আবার কিছু অন্যান্য ব্যবহারকারী অন্যান্য পরামিতিগুলির কিছু কাস্টমাইজ করতে চাইতে পারেন। কিছু ক্ষেত্রে, আপনি কেবল সময়সীমা পরিবর্তন করতে এবং বাকিটি যেমনটি ব্যবহার করতে চান তখন অন্য ক্ষেত্রে যেমন আপনাকে ক্যাশে কাস্টমাইজ করতে পারে।
আপনার ক্লায়েন্টকে ইনস্ট্যান্ট করার সম্ভাব্য উপায়গুলি এখানে রয়েছে (OkHttpClient থেকে নেওয়া):
//just give me the default stuff
HttpClient.Builder().build()
//I want to use custom cache
HttpClient.Builder().cache(MyCache()).build()
//I want custom connection timeout
HttpClient.Builder().connectTimeout(30, TimeUnit.SECONDS).build()
//I am more interested in read/write timeout
HttpClient.Builder()
.readTimeout(30, TimeUnit.SECONDS)
.writeTimeout(30, TimeUnit.SECONDS).build()
যদি আপনি এটির জন্য কোনও কারখানার প্যাটার্ন ব্যবহার করেন তবে আপনি সৃষ্টিশীল পরামিতিগুলির সমস্ত সম্ভাব্য সংমিশ্রণ সহ প্রচুর পদ্ধতি লিখবেন। বিল্ডারের সাথে, আপনি কেবল তাদের যত্ন নিন এবং অন্য সমস্ত প্যারামের যত্ন নেওয়ার জন্য আপনার জন্য বিল্ডার এটি তৈরি করতে দিন।
বিল্ড প্যাটার্ন বস্তু তৈরির জটিলতার উপর জোর দেয় ("পদক্ষেপগুলি" দ্বারা সমাধান করা)
অ্যাবস্ট্রাক্ট প্যাটার্নটি (একাধিক তবে সম্পর্কিত) অবজেক্টগুলির "বিমূর্ত" উপর "কেবল" জোর দেয়।
পার্থক্য পরিষ্কার স্পষ্টভাবে বিল্ডার প্যাটার্নে, বিল্ডার আপনার জন্য নির্দিষ্ট ধরণের অবজেক্ট তৈরি করবে। আপনাকে জানাতে হবে যে বিল্ডার কী তৈরি করতে হবে। কারখানার ধরণে, বিমূর্ত শ্রেণি ব্যবহার করে আপনি সরাসরি নির্দিষ্ট অবজেক্টটি তৈরি করছেন building
এখানে নির্মাতা শ্রেণি প্রধান শ্রেণি এবং নির্দিষ্ট ধরণের শ্রেণীর মধ্যে মধ্যস্থতার কাজ করে। আরও বিমূর্ততা।
উভয়ই অনেক অনুরূপ, তবে কিছু ডিফল্ট মান সহ optionচ্ছিক কিছুতে অবজেক্ট তৈরির জন্য যদি আপনার প্রচুর পরিমাণে প্যারামিটার থাকে তবে বিল্ডার প্যাটার্নে যান।
এই প্রোগ্রামটিতে
নির্মাতা একরকম জটিল কারখানা।
কিন্তু বিল্ডারে আপনি অন্য কারখানা ব্যবহার করে অবজেক্টগুলি ইনস্ট্যান্ট করতে পারেন , এটি চূড়ান্ত এবং বৈধ অবজেক্ট তৈরি করতে প্রয়োজনীয়।
সুতরাং, জটিলতার দ্বারা "ক্রিয়েশনাল প্যাটার্নস" বিবর্তনের কথা বলার সাথে আপনি এটি সম্পর্কে এইভাবে ভাবতে পারেন:
Dependency Injection Container -> Service Locator -> Builder -> Factory
উভয় নিদর্শন একই প্রয়োজনীয়তার জন্য আসে: কিছু ক্লায়েন্ট কোড থেকে কোনও জটিল অবজেক্টের নির্মাণ যুক্তি লুকান। তবে কী "জটিল" (বা, কখনও কখনও জটিল) একটি বস্তুকে পরিণত করে? মূলত, এটি নির্ভরতা, বা বরং আরও আংশিক রাজ্য দ্বারা রচিত কোনও বস্তুর অবস্থার কারণে। আপনি প্রাথমিক অবজেক্টের স্থিতি নির্ধারণের জন্য কনস্ট্রাক্টর দ্বারা নির্ভরতা ইনজেকশন করতে পারেন, তবে কোনও বস্তুর মধ্যে তাদের প্রচুর প্রয়োজন হতে পারে, কিছুগুলি একটি ডিফল্ট প্রাথমিক অবস্থায় থাকবে (কেবল কারণ আমাদের শিখতে হবে যে নালকে ডিফল্ট নির্ভরতা সেট করা সবচেয়ে সহজ উপায় নয়) ) এবং কিছু অন্য কোনও শর্ত দ্বারা চালিত একটি রাজ্যে সেট করে। তদুপরি, এমন কিছু অবজেক্ট বৈশিষ্ট্য রয়েছে যা একরকম "বিস্মৃত নির্ভরতা" তবে তারা alচ্ছিক অবস্থাও ধরে নিতে পারে।
এই জটিলতাটি কাটিয়ে উঠতে দুটি সুপরিচিত উপায় রয়েছে:
রচনা / সমষ্টি: একটি অবজেক্ট তৈরি করুন, তার নির্ভরশীল অবজেক্টগুলি তৈরি করুন, তারপরে একসাথে তারের করুন। এখানে, একজন নির্মাতা স্বচ্ছ এবং নমনীয় প্রক্রিয়াটি তৈরি করতে পারেন যা উপাদানগুলির নির্মাণের নেতৃত্ব দেয় এমন বিধিগুলি নির্ধারণ করে।
পলিমারফিজম: নির্মাণের নিয়মগুলি সরাসরি উপ-টাইপ সংজ্ঞায় ঘোষিত হয়, সুতরাং আপনার কাছে প্রতিটি উপ টাইপের জন্য নিয়মের একটি সেট রয়েছে এবং কিছু শর্ত স্থির করে যে এই নিয়মের মধ্যে কোনটি অবজেক্টটি নির্মাণের জন্য প্রয়োগ করা হয়। এই দৃশ্যে একটি কারখানা পুরোপুরি ফিট করে।
কিছুই এই দুটি পদ্ধতির মিশ্রণ প্রতিরোধ করে। পণ্যের একটি পরিবার কোনও বিল্ডারের সাথে সম্পন্ন বস্তু তৈরির বিমূর্ততা ফেলতে পারে, কোন বিল্ডার কারখানার অবজেক্টটি ইনস্ট্যান্টিয়েট নির্ধারণ করতে কারখানাগুলি ব্যবহার করতে পারে।
আমার মতে বিল্ডার প্যাটার্নটি ব্যবহার করা হয় যখন আপনি অন্যান্য বস্তুর একগুচ্ছ থেকে কোনও বস্তু তৈরি করতে চান এবং অংশটি তৈরি করতে আপনার যে অবজেক্টটি তৈরি করতে চান তার থেকে আলাদা হওয়া প্রয়োজন। এটি বিল্ডার এবং ক্লায়েন্টকে স্বতন্ত্র করতে ক্লায়েন্টের কাছ থেকে অংশের সৃষ্টি লুকিয়ে রাখতে সহায়তা করে। এটি জটিল বস্তু তৈরির জন্য ব্যবহৃত হয় (এমন বস্তু যা জটিল বৈশিষ্ট্যযুক্ত থাকতে পারে)
কারখানার নিদর্শনটি উল্লেখ করে যে আপনি একটি সাধারণ পরিবারের অবজেক্ট তৈরি করতে চান এবং আপনি এটি একবারে বন্ধ হয়ে যেতে চান। এটি সহজ জিনিসগুলির জন্য ব্যবহৃত হয়।
নির্মাতা এবং বিমূর্ত কারখানা
বিল্ডার ডিজাইন প্যাটার্নটি কিছুটা হলেও অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্নের সাথে খুব মিল। এজন্য যখন এক বা অন্য ব্যবহৃত হয় তখন পরিস্থিতিগুলির মধ্যে পার্থক্য তৈরি করতে সক্ষম হওয়া গুরুত্বপূর্ণ। বিমূর্ত কারখানার ক্ষেত্রে, ক্লায়েন্ট তার নিজস্ব অবজেক্ট তৈরি করতে কারখানার পদ্ধতিগুলি ব্যবহার করে। বিল্ডারের ক্ষেত্রে, কীভাবে অবজেক্টটি তৈরি করা যায় তার বিষয়ে বিল্ডার বর্গকে নির্দেশ দেওয়া হয় এবং তার জন্য জিজ্ঞাসা করা হয়, তবে ক্লাসটি যেভাবে একসাথে করা হয় তা বিল্ডার শ্রেণীর উপর নির্ভর করে, এই বিবরণটি দুটি প্যাটার্নের মধ্যে পার্থক্য তৈরি করে।
পণ্যগুলির জন্য সাধারণ ইন্টারফেস
অনুশীলনে কংক্রিট নির্মাতারা তৈরি পণ্যগুলির একটি কাঠামো উল্লেখযোগ্যভাবে আলাদা থাকে, তাই যদি বিভিন্ন পণ্যগুলি সাধারণ পিতাম শ্রেণীর উত্পন্ন করার কারণ না থাকে। এটি অ্যাবস্ট্রাক্ট ফ্যাক্টরি প্যাটার্ন থেকে বিল্ডার প্যাটার্নকেও পৃথক করে যা একটি সাধারণ ধরণের থেকে প্রাপ্ত বস্তু তৈরি করে।
কারখানার প্যাটার্ন রানটাইমের সময় একটি শ্রেণীর একটি কংক্রিট বাস্তবায়ন তৈরি করে, যার মূল উদ্দেশ্যটি হল উপ-শ্রেণিগুলি কোন শ্রেণিটি তাত্ক্ষণিকভাবে চালিত করতে পারে তা সিদ্ধান্ত নেওয়ার জন্য বহুমুখী ব্যবহার করা। এর অর্থ সংকলনের সময় আমরা সঠিক ক্লাসটি তৈরি হবে তা জানি না, অন্যদিকে বিল্ডার প্যাটার্নটি মূলত টেলিস্কোপিং কনস্ট্রাক্টরদের অ্যান্টিপ্যাটার্নের সমস্যা সমাধানের সাথে সম্পর্কিত, যা একটি শ্রেণীর বিপুল সংখ্যক alচ্ছিক ক্ষেত্রের কারণে উদ্ভূত হয়। বিল্ডার প্যাটার্নে পলিমারফিজমের কোনও ধারণা নেই, কারণ আমরা জানি যে সংকলনের সময় আমরা কোন বস্তুটি তৈরির চেষ্টা করছি।
এই দুটি নিদর্শনগুলির একমাত্র সাধারণ থিমটি কারখানার পদ্ধতিগুলির পিছনে নির্মাণকারী এবং অবজেক্ট তৈরির আড়ালকরণ এবং উন্নত অবজেক্ট নির্মাণের জন্য বিল্ড পদ্ধতি is
ফ্যাক্টরি প্যাটার্ন আপনাকে একবারে একটি অবজেক্ট তৈরি করতে দেয় যখন বিল্ডার প্যাটার্ন আপনাকে কোনও অবজেক্টের তৈরি প্রক্রিয়াটি ভেঙে দেয়। এইভাবে, আপনি কোনও অবজেক্ট তৈরির সময় বিভিন্ন কার্যকারিতা যুক্ত করতে পারেন।