এই মুহুর্তে, আপনি সম্ভবত ইতিমধ্যে ডিজাইনের নিদর্শনগুলির সম্মুখীন হয়েছেন। উদাহরণস্বরূপ, সিঙ্গেলটন

আসুন মনে করি যে নিদর্শনগুলি কী, কেন তাদের প্রয়োজন এবং কী সৃষ্টিগত নিদর্শনগুলি (সিঙ্গেলটন একটি উদাহরণ)। আমরা একটি নতুন প্যাটার্নও অধ্যয়ন করব: কারখানার পদ্ধতি।

সফ্টওয়্যার বিকাশে, একটি নকশা প্যাটার্ন হল একটি পুনরাবৃত্তিযোগ্য স্থাপত্য নির্মাণ যা কিছু পুনরাবৃত্ত প্রসঙ্গের মধ্যে একটি নকশা সমস্যার সমাধানকে উপস্থাপন করে।

সাধারণত, একটি প্যাটার্ন একটি চূড়ান্ত সমাধান নয় যা সরাসরি কোডে রূপান্তর করা যেতে পারে। এটি শুধুমাত্র একটি সমস্যার মডেল সমাধান যা বিভিন্ন পরিস্থিতিতে ব্যবহার করা যেতে পারে।

ক্রিয়েশনাল প্যাটার্ন হল ডিজাইন প্যাটার্ন যা বস্তু তৈরির প্রক্রিয়ার সাথে মোকাবিলা করে। তারা এমন একটি সিস্টেম তৈরি করা সম্ভব করে যা বস্তু তৈরি, রচনা এবং উপস্থাপন করতে ব্যবহৃত পদ্ধতি থেকে স্বাধীন।

একটি ফ্যাক্টরি পদ্ধতি হল একটি সৃজনশীল নকশার প্যাটার্ন যা একটি অভিভাবক শ্রেণিতে বস্তু তৈরি করার জন্য একটি সাধারণ ইন্টারফেসকে সংজ্ঞায়িত করে, যার বংশধরদের এই বস্তুগুলি তৈরি করার ক্ষমতা দেয়। সৃষ্টির সময়, বংশধররা নির্ধারণ করতে পারে কোন শ্রেণী তৈরি করতে হবে।

প্যাটার্ন কি সমস্যা সমাধান করে?

কল্পনা করুন যে আপনি একটি ডেলিভারি প্রোগ্রাম তৈরি করার সিদ্ধান্ত নিয়েছেন। প্রাথমিকভাবে, আপনি গাড়ির সাথে কুরিয়ার ভাড়া করবেন এবং একটি ব্যবহার করবেনগাড়িপ্রোগ্রামে একটি ডেলিভারি গাড়ির প্রতিনিধিত্ব করার জন্য বস্তু। কুরিয়াররা বিন্দু A থেকে বিন্দু পর্যন্ত প্যাকেজ সরবরাহ করে। সহজ কিছু.

অনুষ্ঠানটি জনপ্রিয়তা পাচ্ছে। আপনার ব্যবসা বাড়ছে এবং আপনি নতুন বাজারে প্রসারিত করতে চান। উদাহরণস্বরূপ, আপনি খাদ্য সরবরাহ এবং মাল পরিবহন শুরু করতে পারেন। এই ক্ষেত্রে, পায়ে হেঁটে, স্কুটারে এবং সাইকেলে কুরিয়ার দ্বারা খাবার সরবরাহ করা যেতে পারে তবে মাল পরিবহনের জন্য ট্রাকের প্রয়োজন।

এখন আপনাকে বেশ কিছু জিনিসের ট্র্যাক রাখতে হবে (কখন, কাকে, কী এবং কতটা ডেলিভারি করা হবে), সহ প্রতিটি কুরিয়ার কতটা বহন করতে পারে। পরিবহনের নতুন মোডের বিভিন্ন গতি এবং ক্ষমতা রয়েছে। তারপর আপনি লক্ষ্য করেন যে আপনার প্রোগ্রামের অধিকাংশ সত্ত্বা দৃঢ়ভাবে আবদ্ধ হয়গাড়িক্লাস আপনি উপলব্ধি করেছেন যে আপনার প্রোগ্রামটিকে অন্যান্য বিতরণ পদ্ধতির সাথে কাজ করার জন্য, আপনাকে বিদ্যমান কোড বেসটি পুনরায় লিখতে হবে এবং প্রতিবার যখন আপনি একটি নতুন গাড়ি যোগ করবেন তখন এটি আবার করতে হবে।

ফলাফল হল শর্তসাপেক্ষ বিবৃতি দিয়ে ভরা ভয়ঙ্কর কোড যা পরিবহনের ধরণের উপর নির্ভর করে বিভিন্ন ক্রিয়া সম্পাদন করে।

সমাধান

কারখানা পদ্ধতি প্যাটার্ন সরাসরি নতুন অপারেটর ব্যবহার না করে একটি বিশেষ কারখানা পদ্ধতি কল করে বস্তু তৈরি করার পরামর্শ দেয়। ফ্যাক্টরি পদ্ধতি রয়েছে এমন ক্লাসের সাবক্লাসগুলি নির্দিষ্ট যানবাহনের তৈরি বস্তুগুলিকে সংশোধন করতে পারে। প্রথম নজরে, এটি অর্থহীন বলে মনে হতে পারে: আমরা কেবল প্রোগ্রামের এক জায়গা থেকে অন্য জায়গায় কনস্ট্রাক্টর কলটি সরিয়ে নিয়েছি। কিন্তু এখন আপনি তৈরি করা পরিবহনের ধরন পরিবর্তন করতে একটি সাবক্লাসে কারখানার পদ্ধতিকে ওভাররাইড করতে পারেন।

আসুন এই পদ্ধতির জন্য ক্লাস ডায়াগ্রামটি দেখি:

এই সিস্টেমটি কাজ করার জন্য, সমস্ত প্রত্যাবর্তিত বস্তুর একটি সাধারণ ইন্টারফেস থাকতে হবে। সাবক্লাসগুলি এই ইন্টারফেসটি বাস্তবায়ন করে এমন বিভিন্ন শ্রেণীর বস্তু তৈরি করতে সক্ষম হবে।

উদাহরণস্বরূপ, ট্রাক এবং কার ক্লাসগুলি কুরিয়ার ট্রান্সপোর্ট ইন্টারফেসকে একটি বিতরণ পদ্ধতির সাথে প্রয়োগ করে । এই ক্লাসগুলির প্রত্যেকটি পদ্ধতিটি ভিন্নভাবে প্রয়োগ করে: ট্রাকগুলি মাল সরবরাহ করে, যখন গাড়িগুলি খাদ্য, প্যাকেজ ইত্যাদি সরবরাহ করে। TruckCreator ক্লাসের ফ্যাক্টরি পদ্ধতি একটি ট্রাক বস্তু ফেরত দেয়, এবং CarCreator ক্লাস একটি গাড়ী অবজেক্ট প্রদান করে।

ফ্যাক্টরি পদ্ধতির ক্লায়েন্টের জন্য, এই বস্তুগুলির মধ্যে কোন পার্থক্য নেই, কারণ এটি তাদের এক ধরণের বিমূর্ত কুরিয়ার ট্রান্সপোর্ট হিসাবে বিবেচনা করবে । ক্লায়েন্ট গভীরভাবে যত্ন নেবে যে অবজেক্টের ডেলিভারির জন্য একটি পদ্ধতি রয়েছে, তবে সেই পদ্ধতিটি কীভাবে কাজ করে তা গুরুত্বপূর্ণ নয়।

জাভাতে বাস্তবায়ন:


public interface CourierTransport {
	void deliver();
}
public class Car implements CourierTransport {
	@Override
	public void deliver() {
    		System.out.println("The package is being delivered by car");
	}
}
public class Truck implements CourierTransport {
	@Override
	public void deliver() {
    		System.out.println("The freight is being delivered by truck");
	}
}
public abstract class CourierTransportCreator {
	public abstract CourierTransport createTransport();
}
public class CarCreator extends CourierTransportCreator {
	@Override
	public CourierTransport createTransport() {
    		return new Car();
	}
}
public class TruckCreator extends CourierTransportCreator {
	@Override
	public CourierTransport createTransport() {
    		return new Truck();
	}
}
 
public class Delivery {
	private String address;
	private CourierTransport courierTransport;
 
	public void Delivery() {
	}
 
	public Delivery(String address, CourierTransport courierTransport) {
    	this.address = address;
    	this.courierTransport = courierTransport;
	}
 
	public CourierTransport getCourierTransport() {
    		return courierTransport;
	}
 
	public void setCourierTransport(CourierTransport courierTransport) {
    		this.courierTransport = courierTransport;
	}
 
	public String getAddress() {
    		return address;
	}
 
	public void setAddress(String address) {
    		this.address = address;
	}
}
public static void main(String[] args) {
    	// Accept a new type of order from the database (pseudocode)
    	String type = database.getTypeOfDeliver();
 
    	Delivery delivery = new Delivery();
    	
    	// Set the transport for delivery
        delivery.setCourierTransport(getCourierTransportByType(type));
    	
    	// Make the delivery
        delivery.getCourierTransport().deliver();
 
	}
 
	public static CourierTransport getCourierTransportByType(String type) {
    	switch (type) {
        	case "CarDelivery":
            	return new CarCreator().createTransport();
        	case "TruckDelivery":
            	return new TruckCreator().createTransport();
        	default:
            	throw new RuntimeException();
	    }
	}
    

যদি আমরা একটি নতুন ডেলিভারি অবজেক্ট তৈরি করতে চাই, তাহলে প্রোগ্রামটি স্বয়ংক্রিয়ভাবে একটি উপযুক্ত পরিবহন অবজেক্ট তৈরি করে।

কখন আমরা এই প্যাটার্ন প্রয়োগ করা উচিত?

1. যখন আপনি আগে থেকে জানেন না যে অবজেক্টের প্রকার এবং নির্ভরতা আপনার কোডের সাথে কাজ করতে হবে।

ফ্যাক্টরি পদ্ধতি পরিবহন ব্যবহার করে এমন কোড থেকে পরিবহনের ফর্ম তৈরির কোডকে আলাদা করে। ফলস্বরূপ, অবজেক্ট তৈরির কোড বাকি কোড স্পর্শ না করে বাড়ানো যেতে পারে।

উদাহরণস্বরূপ, একটি নতুন ধরনের পরিবহনের জন্য সমর্থন যোগ করার জন্য, আপনাকে একটি নতুন সাবক্লাস তৈরি করতে হবে এবং এতে একটি ফ্যাক্টরি পদ্ধতি সংজ্ঞায়িত করতে হবে যা নতুন পরিবহনের একটি উদাহরণ প্রদান করে।

2. যখন আপনি নতুন তৈরি করার পরিবর্তে বিদ্যমান বস্তুগুলিকে পুনরায় ব্যবহার করে সিস্টেম সংস্থানগুলি সংরক্ষণ করতে চান৷

রিসোর্স-ইনটেনসিভ বস্তুর সাথে কাজ করার সময় এই সমস্যাটি সাধারণত ঘটে, যেমন ডাটাবেস সংযোগ, ফাইল সিস্টেম ইত্যাদি।

বিদ্যমান বস্তুগুলি পুনঃব্যবহার করার জন্য আপনাকে যে পদক্ষেপগুলি নিতে হবে সে সম্পর্কে চিন্তা করুন:

  1. প্রথমত, আপনার তৈরি করা সমস্ত বস্তু সংরক্ষণ করার জন্য আপনাকে একটি শেয়ার্ড রিপোজিটরি তৈরি করতে হবে।

  2. একটি নতুন বস্তুর অনুরোধ করার সময়, আপনাকে সংগ্রহস্থলে দেখতে হবে এবং এটিতে একটি উপলব্ধ বস্তু রয়েছে কিনা তা পরীক্ষা করতে হবে।

  3. বস্তুটিকে ক্লায়েন্ট কোডে ফেরত দিন।

  4. কিন্তু যদি কোন উপলব্ধ বস্তু না থাকে, একটি নতুন তৈরি করুন এবং এটি সংগ্রহস্থলে যোগ করুন।

এই সমস্ত কোড এমন জায়গায় রাখতে হবে যা ক্লায়েন্ট কোডকে বিশৃঙ্খল করে না। সবচেয়ে সুবিধাজনক জায়গাটি কনস্ট্রাক্টর হবে, যেহেতু অবজেক্ট তৈরি করার সময় আমাদের শুধুমাত্র এই সমস্ত চেকগুলির প্রয়োজন। হায়রে, একজন কনস্ট্রাক্টর সর্বদা একটি নতুন বস্তু তৈরি করে - এটি একটি বিদ্যমান বস্তুকে ফেরত দিতে পারে না।

এর মানে হল যে অন্য একটি পদ্ধতি প্রয়োজন যা বিদ্যমান এবং নতুন উভয় বস্তুকে ফিরিয়ে দিতে পারে। এটি কারখানা পদ্ধতি হবে।

3. যখন আপনি ব্যবহারকারীদের আপনার ফ্রেমওয়ার্ক বা লাইব্রেরির অংশ প্রসারিত করার অনুমতি দিতে চান।

ব্যবহারকারীরা উত্তরাধিকারের মাধ্যমে আপনার ফ্রেমওয়ার্ক ক্লাস প্রসারিত করতে পারে। কিন্তু আপনি কীভাবে কাঠামোটিকে স্ট্যান্ডার্ডের পরিবর্তে এই নতুন ক্লাসের বস্তু তৈরি করবেন?

সমাধান হল ব্যবহারকারীদের শুধুমাত্র কম্পোনেন্টগুলিই নয়, সেই ক্লাসগুলিকেও প্রসারিত করতে দেওয়া যা সেই উপাদানগুলি তৈরি করে৷ এবং এর জন্য, তৈরির ক্লাসে অবশ্যই নির্দিষ্ট সৃষ্টি পদ্ধতি থাকতে হবে যা সংজ্ঞায়িত করা যেতে পারে।

সুবিধাদি

  • নির্দিষ্ট পরিবহন ক্লাস থেকে একটি ক্লাস ডিকপল করে।
  • এক জায়গায় পরিবহনের ফর্ম তৈরি করার জন্য কোড রাখে, কোডটি বজায় রাখা সহজ করে।
  • প্রোগ্রামে পরিবহনের নতুন মোড যোগ করা সহজ করে।
  • খোলা-বন্ধ নীতি বাস্তবায়ন করে।

অসুবিধা

বৃহৎ সমান্তরাল শ্রেণীর শ্রেণিবিন্যাসের দিকে নিয়ে যেতে পারে, যেহেতু প্রতিটি পণ্য শ্রেণীর নিজস্ব সৃষ্টিকর্তা উপশ্রেণী থাকতে হবে।

আসুন সংক্ষিপ্ত করা যাক

আপনি কারখানা পদ্ধতির প্যাটার্ন সম্পর্কে শিখেছেন এবং একটি সম্ভাব্য বাস্তবায়ন দেখেছেন। এই প্যাটার্নটি প্রায়শই বিভিন্ন লাইব্রেরিতে ব্যবহৃত হয় যা অন্যান্য অবজেক্ট তৈরির জন্য অবজেক্ট প্রদান করে।

ফ্যাক্টরি পদ্ধতির প্যাটার্নটি ব্যবহার করুন যখন আপনি আপনার মূল ব্যবসায়িক যুক্তির সাথে ইন্টারঅ্যাক্ট করার জন্য বিদ্যমান ক্লাসের সাবক্লাসের নতুন অবজেক্টগুলি সহজে যোগ করতে চান এবং বিভিন্ন প্রসঙ্গের কারণে আপনার কোডটি ব্লাট না করেন।