1. কারখানা পদ্ধতি প্যাটার্ন কি
ফ্যাক্টরি মেথড প্যাটার্ন হল একটি সৃষ্টিকরণ ডিজাইন প্যাটার্ন, যা সাবক্লাসে অবজেক্ট সৃষ্টির প্রক্রিয়াটি আচ্ছাদন করার একটি উপায় উপস্থাপন করে। এই ভাবে, ক্লায়েন্ট প্রাকৃতিক অবজেক্ট সৃষ্টির প্রক্রিয়ার বিষয়ে চিন্তা করে না, ফ্যাক্টরি মেথডটি কল করে অবজেক্ট তৈরি করতে পারে।
2. ফ্যাক্টরি মেথড প্যাটার্নের বৈশিষ্ট্য এবং সুবিধাসমূহ
ফ্যাক্টরি মেথড প্যাটার্নের বৈশিষ্ট্য হল:
- অবজেক্টের সৃষ্টি এবং ব্যবহারকে পৃথক করা, যেখানে ক্লায়েন্ট শুধুমাত্র ফ্যাক্টরি মেথড এবং সাধারণ প্রোডাক্ট ইন্টারফেসের বিষয়ে চিন্তা করে।
- নতুন নির্দিষ্ট ফ্যাক্টরি ক্লাস এবং নির্দিষ্ট প্রোডাক্ট ক্লাস যোগ করে, খোলা/বন্ধ প্রিন্সিপলে মেনে নতুন নতুন সিস্টেমের সংযোজন করা যায়।
ফ্যাক্টরি মেথড প্যাটার্নের সুবিধা হল:
- অবজেক্ট সৃষ্টির প্রক্রিয়া আচ্ছাদন করা, যা সিস্টেমকে কঠিন এবং প্রসারশীল করে।
- নির্দিষ্ট প্রোডাক্ট ক্লাসের বাস্তবায়নের বিবরণ লুকিয়ে দেওয়া, ক্লায়েন্টের নির্ভরতা এবং বন্ধনিপত্তি কমিয়ে দেওয়া।
- পণ্য তৈরি করার একটি মানদণ্ডীকৃত উপায় সরবরাহ করা, যা সিস্টেমের রক্ষণাবেক্ষণ এবং প্রসারণ সুবিধাজনক করে।
3. ফ্যাক্টরি মেথড প্যাটার্নের আবেদন দায়িত্ব
ফ্যাক্টরি মেথড প্যাটার্ন নিম্নলিখিত পরিস্থিতিতে উপযোগী:
- ক্লায়েন্ট নির্দিষ্ট প্রোডাক্ট ক্লাসের উপর নির্ভর না, তবে সাধারণ প্রোডাক্ট ইন্টারফেসে নির্ভরতা থাকে।
- ক্লায়েন্টের দরকার হল বিভিন্ন শর্তানুযায়ী বিভিন্ন পণ্য ব্জায়িত করা।
- পণ্য বস্তু সৃষ্টির প্রক্রিয়া আচ্ছাদন এবং লুকানোর প্রয়োজন।
4. Golang-এ ফ্যাক্টরি মেথড প্যাটার্নের অনুষ্ঠান
4.1 UML শ্রেণী রাশিফল
4.2 অনুষ্ঠান পদক্ষেপ 1: সাধারণ প্রোডাক্ট ইন্টারফেস সংজ্ঞায়িত করুন
package factory
// প্রোডাক্ট হল সাধারণ প্রোডাক্ট ইন্টারফেস
type প্রোডাক্ট interface {
অপারেশন() string
}
4.3 অনুষ্ঠান পদক্ষেপ 2: নিষ্ক্রিয় প্রোডাক্ট বাস্তবায়ন ক্লাস তৈরি
package factory
// কনক্রিটপ্রোডাক্টA হল কনক্রিট প্রোডাক্ট ক্লাস A
type কনক্রিটপ্রোডাক্টA struct{}
// অপারেশন হল কনক্রিট প্রোডাক্ট A ক্লাসের পদক্ষেপ
func (p *কনক্রিটপ্রোডাক্টA) অপারেশন() string {
return "কনক্রিটপ্রোডাক্টA"
}
// কনক্রিটপ্রোডাক্টB হল কনক্রিট প্রোডাক্ট ক্লাস B
type কনক্রিটপ্রোডাক্টB struct{}
// অপারেশন হল কনক্রিট প্রোডাক্ট B ক্লাসের পদক্ষেপ
func (p *কনক্রিটপ্রোডাক্টB) অপারেশন() string {
return "কনক্রিটপ্রোডাক্টB"
}
4.4 অনুষ্ঠান পদক্ষেপ 3: সাধারণ ফ্যাক্টরি ইন্টারফেস সংজ্ঞায়িত করুন
package factory
// ফ্যাক্টরি হল সাধারণ ফ্যাক্টরি ইন্টারফেস
type ফ্যাক্টরি interface {
প্রোডাক্ট তৈরি করুন() প্রোডাক্ট
}
4.5 অনুষ্ঠান পদক্ষেপ 4: নিষ্ক্রিয় ফ্যাক্টরি বাস্তবায়ন ক্লাস তৈরি
package factory
// কনক্রিটফ্যাক্টরিA হল কনক্রিট ফ্যাক্টরি ক্লাস A
type কনক্রিটফ্যাক্টরিA struct{}
// প্রোডাক্ট তৈরি করুন হল কনক্রিট ফ্যাক্টরি A ক্লাসের পদক্ষেপ
func (f *কনক্রিটফ্যাক্টরিA) প্রোডাক্ট তৈরি করুন() প্রোডাক্ট {
return &কনক্রিটপ্রোডাক্টA{}
}
// কনক্রিটফ্যাক্টরিB হল কনক্রিট ফ্যাক্টরি ক্লাস B
type কনক্রিটফ্যাক্টরিB struct{}
// প্রোডাক্ট তৈরি করুন হল কনক্রিট ফ্যাক্টরি B ক্লাসের পদক্ষেপ
func (f *কনক্রিটফ্যাক্টরিB) প্রোডাক্ট তৈরি করুন() প্রোডাক্ট {
return &কনক্রিটপ্রোডাক্টB{}
}
4.6 অনুষ্ঠান পদক্ষেপ 5: ক্লায়েন্ট ফ্যাক্টরি মেথড ইঙ্কোয়ের প্রোডাক্ট অবজেক্ট তৈরি করা
package main
import (
"fmt"
"github.com/your/package/factory"
)
func main() {
// কনক্রিট ফ্যাক্টরি A তৈরি করুন
কনক্রিটফ্যাক্টরিA := &factory.কনক্রিটফ্যাক্টরিA{}
// ফ্যাক্টরি মেথড ইঙ্কোয়ের প্রোডাক্ট অবজেক্ট তৈরি করুন
প্রোডাক্টA := কনক্রিটফ্যাক্টরিA.প্রোডাক্ট তৈরি করুন()
fmt.Println(প্রোডাক্টA.অপারেশন())
// কনক্রিট ফ্যাক্টরি B তৈরি করুন
কনক্রিটফ্যাক্টরিB := &factory.কনক্রিটফ্যাক্টরিB{}
// ফ্যাক্টরি মেথড ইঙ্কোয়ের প্রোডাক্ট অবজেক্ট তৈরি করুন
প্রোডাক্টB := কনক্রিটফ্যাক্টরিB.প্রোডাক্ট তৈরি করুন()
fmt.Println(প্রোডাক্টB.অপারেশন())
}
উপরের কোডে, আমরা সাধারণ প্রোডাক্ট ইন্টারফেস প্রোডাক্ট
এবং কনক্রিট প্রোডাক্ট ক্লাস কনক্রিটপ্রোডাক্টA
এবং কনক্রিটপ্রোডাক্টB
সংজ্ঞায়িত করেছি। তারপরে, আমরা সাধারণ ফ্যাক্টরি ইন্টারফেস ফ্যাক্টরি
এবং কনক্রিট ফ্যাক্টরি ক্লাস কনক্রিটফ্যাক্টরিA
এবং `