নিজেকে জিজ্ঞাসা করুন তারা কী এবং কেন আমাদের তা আছে। তারা উভয় সেখানে আছে একটি বস্তুর উদাহরণ তৈরি করতে।
ElementarySchool school = new ElementarySchool();
ElementarySchool school = SchoolFactory.Construct(); // new ElementarySchool() inside
এখন পর্যন্ত কোনও পার্থক্য নেই। এখন কল্পনা করুন যে আমাদের বিভিন্ন বিদ্যালয়ের প্রকার রয়েছে এবং আমরা এলিমেন্টারি স্কুল থেকে হাইস্কুলে পরিবর্তন করতে চাই (যা একটি এলিমেন্টারি স্কুল থেকে প্রাপ্ত বা এলিমেন্টারিস্কুলের মতো একই ইন্টারফেস আইএস স্কুল প্রয়োগ করে)। কোড পরিবর্তনটি হ'ল:
HighSchool school = new HighSchool();
HighSchool school = SchoolFactory.Construct(); // new HighSchool() inside
একটি ইন্টারফেস ক্ষেত্রে আমাদের হবে:
ISchool school = new HighSchool();
ISchool school = SchoolFactory.Construct(); // new HighSchool() inside
এখন যদি আপনার একাধিক জায়গায় এই কোড থাকে তবে আপনি দেখতে পাচ্ছেন যে কারখানার পদ্ধতিটি ব্যবহার করা বেশ সস্তা হতে পারে কারণ একবার আপনি তৈরি ফ্যাক্টরি পদ্ধতিটি বদলে ফেললে (আমরা যদি ইন্টারফেসের সাথে দ্বিতীয় উদাহরণটি ব্যবহার করি)।
এবং এটিই মূল পার্থক্য এবং সুবিধা। যখন আপনি একটি জটিল শ্রেণীর শ্রেণিবিন্যাসের সাথে ডিল শুরু করেন এবং আপনি এই জাতীয় শ্রেণিবদ্ধ থেকে গতিশীলভাবে কোনও শ্রেণীর একটি উদাহরণ তৈরি করতে চান আপনি নিম্নলিখিত কোডটি পান। কারখানার পদ্ধতিগুলির পরে এমন একটি প্যারামিটার নেওয়া যেতে পারে যা পদ্ধতিটি কী কনক্রিটের উদাহরণটি ইনস্ট্যান্ট করতে হবে তা জানায়। ধরা যাক আপনার একটি মাইস্টুডেন্ট ক্লাস রয়েছে এবং আপনার সংশ্লিষ্ট ইস্কুল অবজেক্টটি ইনস্ট্যান্ট করা দরকার যাতে আপনার ছাত্র that বিদ্যালয়ের একজন সদস্য।
ISchool school = SchoolFactory.ConstructForStudent(myStudent);
এখন আপনার অ্যাপ্লিকেশনটিতে আপনার কাছে একটি জায়গা রয়েছে যাতে ব্যবসার যুক্তি রয়েছে যা নির্ধারণ করে যে ISchool বিভিন্ন IStudent অবজেক্টের জন্য ইনস্ট্যান্ট করতে কী পছন্দ করে।
সুতরাং - সাধারণ শ্রেণীর জন্য (মান অবজেক্টস ইত্যাদি) কনস্ট্রাক্টর ঠিকঠাক (আপনি আপনার অ্যাপ্লিকেশনকে বেশি পরিমাণে বিবেচনা করতে চান না) তবে জটিল শ্রেণীর শ্রেণিবিন্যাসের জন্য ফ্যাক্টরি পদ্ধতিটি একটি পছন্দের উপায়।
আপনি চারটি বই "প্রোগ্রাম একটি ইন্টারফেস, একটি বাস্তবায়ন নয়" এর গ্যাং থেকে প্রথম নকশার নীতিটি অনুসরণ করেন ।