আমি বিল্ডার প্যাটার্নের অনেকগুলি বাস্তবায়ন দেখেছি (মূলত জাভাতে)। তাদের সকলের একটি সত্তা শ্রেণি রয়েছে (আসুন একটি Person
শ্রেণি বলি ) এবং একটি নির্মাতা শ্রেণি রয়েছে PersonBuilder
। নির্মাতা বিভিন্ন ক্ষেত্র "স্ট্যাকস" করে এবং তর্কগুলি new Person
পাস করার সাথে একটি ফেরত দেয় । আমাদের কেন নির্মাতাদের ক্লাসের স্পষ্টতই দরকার হয়, পরিবর্তে সমস্ত বিল্ডার পদ্ধতি Person
ক্লাসে রেখে দেওয়া?
উদাহরণ স্বরূপ:
class Person {
private String name;
private Integer age;
public Person() {
}
Person withName(String name) {
this.name = name;
return this;
}
Person withAge(int age) {
this.age = age;
return this;
}
}
আমি কেবল বলতে পারি Person john = new Person().withName("John");
PersonBuilder
ক্লাসের দরকার কেন ?
আমি দেখতে পাচ্ছি একমাত্র সুবিধা, আমরা Person
ক্ষেত্রগুলি যেমন ঘোষণা করতে পারি final
, তা হ্রাসযোগ্যতা নিশ্চিত করে।
withName
কেবলমাত্র নাম ক্ষেত্র পরিবর্তিত হয়ে আমি সেই ব্যক্তির একটি অনুলিপি ফিরিয়ে দিতে পারি । অন্য কথায়, অপরিবর্তনীয় Person john = new Person().withName("John");
এমনকি কাজ করতে পারে Person
(এবং এটি কার্যকরী প্রোগ্রামিংয়ের একটি সাধারণ প্যাটার্ন)।
void
পদ্ধতিগুলি এড়িয়ে চলেন । সুতরাং, উদাহরণস্বরূপ যদি Person
এমন কোনও পদ্ধতি থাকে যা তাদের নাম প্রিন্ট করে, আপনি এখনও এটি একটি সাবলীল ইন্টারফেসের সাথে চেইন করতে পারেন person.setName("Alice").sayName().setName("Bob").sayName()
। যাইহোক, আমি আপনার পরামর্শ সহ জাভডকগুলিতে এনিোটেট @return Fluent interface
করি - এটি জেনেরিক এবং যথেষ্ট পরিস্কার যখন এটি return this
কার্যকর করা শেষে যে কোনও পদ্ধতিতে প্রয়োগ করে এবং এটি মোটামুটি পরিষ্কার। সুতরাং, একজন নির্মাতা একটি সাবলীল ইন্টারফেসও করবে।
chainable setters
: D