இந்த கட்டத்தில், நீங்கள் ஏற்கனவே வடிவமைப்பு வடிவங்களை சந்தித்திருக்கலாம். உதாரணமாக, சிங்கிள்டன் .

வடிவங்கள் என்ன, அவை ஏன் தேவைப்படுகின்றன, மற்றும் படைப்பு வடிவங்கள் என்ன என்பதை நினைவுபடுத்துவோம் (சிங்கிள்டன் ஒரு எடுத்துக்காட்டு). நாங்கள் ஒரு புதிய வடிவத்தையும் படிப்போம்: தொழிற்சாலை முறை.

மென்பொருள் மேம்பாட்டில், வடிவமைப்பு முறை என்பது மீண்டும் மீண்டும் நிகழக்கூடிய கட்டடக்கலை கட்டமைப்பாகும், இது சில தொடர்ச்சியான சூழலில் வடிவமைப்பு சிக்கலுக்கான தீர்வைக் குறிக்கிறது.

பொதுவாக, ஒரு வடிவமானது நேரடியாக குறியீட்டாக மாற்றக்கூடிய இறுதித் தீர்வு அல்ல. இது பல்வேறு சூழ்நிலைகளில் பயன்படுத்தக்கூடிய ஒரு பிரச்சனைக்கு ஒரு மாதிரி தீர்வு.

படைப்பு வடிவங்கள் என்பது பொருட்களை உருவாக்கும் செயல்முறையை கையாளும் வடிவமைப்பு வடிவங்கள் ஆகும். பொருட்களை உருவாக்குவதற்கும், உருவாக்குவதற்கும், வழங்குவதற்கும் பயன்படுத்தப்படும் முறையிலிருந்து சுயாதீனமான ஒரு அமைப்பை உருவாக்குவதை அவை சாத்தியமாக்குகின்றன.

ஒரு தொழிற்சாலை முறை என்பது ஒரு படைப்பு வடிவமைப்பு வடிவமாகும், இது ஒரு பெற்றோர் வகுப்பில் பொருட்களை உருவாக்குவதற்கான பொதுவான இடைமுகத்தை வரையறுக்கிறது, அதன் சந்ததியினருக்கு இந்த பொருட்களை உருவாக்கும் திறனை அளிக்கிறது. உருவாக்கும் நேரத்தில், எந்த வகுப்பை உருவாக்குவது என்பதை சந்ததியினர் தீர்மானிக்க முடியும்.

முறை என்ன சிக்கலை தீர்க்கிறது?

நீங்கள் ஒரு விநியோக திட்டத்தை உருவாக்க முடிவு செய்கிறீர்கள் என்று கற்பனை செய்து பாருங்கள். ஆரம்பத்தில், நீங்கள் கார்களுடன் கூரியர்களை வாடகைக்கு எடுப்பீர்கள் மற்றும் ஒரு பயன்படுத்துவீர்கள்கார்திட்டத்தில் டெலிவரி வாகனத்தை பிரதிநிதித்துவப்படுத்தும் பொருள். கூரியர்கள் புள்ளி A முதல் புள்ளி B வரை பேக்கேஜ்களை வழங்குகின்றன. எளிதான பீஸி.

நிரல் பிரபலமடைந்து வருகிறது. உங்கள் வணிகம் வளர்ந்து வருகிறது, நீங்கள் புதிய சந்தைகளில் விரிவாக்க விரும்புகிறீர்கள். எடுத்துக்காட்டாக, நீங்கள் உணவு விநியோகம் மற்றும் சரக்குகளை அனுப்பவும் தொடங்கலாம். இந்நிலையில், கூரியர் மூலம், கால் நடையிலும், ஸ்கூட்டர்களிலும், மிதிவண்டிகளிலும் உணவு வழங்க முடியும், ஆனால் சரக்கு போக்குவரத்துக்கு லாரிகள் தேவைப்படுகின்றன.

இப்போது நீங்கள் பல விஷயங்களைக் கண்காணிக்க வேண்டும் (எப்போது, ​​யாருக்கு, என்ன, எவ்வளவு டெலிவரி செய்யப்படும்), ஒவ்வொரு கூரியரும் எவ்வளவு எடுத்துச் செல்லலாம் என்பது உட்பட. புதிய போக்குவரத்து முறைகள் வெவ்வேறு வேகம் மற்றும் திறன் கொண்டவை. உங்கள் திட்டத்தில் உள்ள பெரும்பாலான நிறுவனங்கள் வலுவாக இணைக்கப்பட்டிருப்பதை நீங்கள் கவனிக்கிறீர்கள்கார்வர்க்கம். உங்கள் நிரலை மற்ற டெலிவரி முறைகளுடன் வேலை செய்ய, நீங்கள் ஏற்கனவே உள்ள குறியீட்டு அடிப்படையை மீண்டும் எழுத வேண்டும் மற்றும் ஒவ்வொரு முறையும் நீங்கள் ஒரு புதிய வாகனத்தைச் சேர்க்க வேண்டும் என்பதை நீங்கள் புரிந்துகொள்கிறீர்கள்.

இதன் விளைவாக, போக்குவரத்து வகையைப் பொறுத்து வெவ்வேறு செயல்களைச் செய்யும் நிபந்தனை அறிக்கைகள் நிறைந்த பயங்கரமான குறியீடு.

தீர்வு

புதிய ஆபரேட்டரை நேரடியாகப் பயன்படுத்துவதற்குப் பதிலாக ஒரு சிறப்புத் தொழிற்சாலை முறையை அழைப்பதன் மூலம் பொருட்களை உருவாக்குவதற்கு தொழிற்சாலை முறை முறை பரிந்துரைக்கிறது . தொழிற்சாலை முறையைக் கொண்ட வகுப்பின் துணைப்பிரிவுகள் குறிப்பிட்ட வாகனங்களின் உருவாக்கப்பட்ட பொருட்களை மாற்றியமைக்க முடியும். முதல் பார்வையில், இது அர்த்தமற்றதாகத் தோன்றலாம்: கன்ஸ்ட்ரக்டர் அழைப்பை நிரலில் ஒரு இடத்திலிருந்து மற்றொரு இடத்திற்கு நகர்த்தியுள்ளோம். ஆனால் இப்போது நீங்கள் உருவாக்கப்படும் போக்குவரத்து வகையை மாற்ற, தொழிற்சாலை முறையை துணை வகுப்பில் மேலெழுதலாம்.

இந்த அணுகுமுறைக்கான வகுப்பு வரைபடத்தைப் பார்ப்போம்:

இந்த அமைப்பு வேலை செய்ய, திரும்பிய அனைத்து பொருட்களுக்கும் பொதுவான இடைமுகம் இருக்க வேண்டும். இந்த இடைமுகத்தை செயல்படுத்தும் வெவ்வேறு வகுப்புகளின் பொருட்களை துணைப்பிரிவுகள் உருவாக்க முடியும்.

எடுத்துக்காட்டாக, டிரக் மற்றும் கார் வகுப்புகள் கொரியர் டிரான்ஸ்போர்ட் இடைமுகத்தை டெலிவரி முறையுடன் செயல்படுத்துகின்றன . இந்த வகுப்புகள் ஒவ்வொன்றும் இந்த முறையை வெவ்வேறு வழிகளில் செயல்படுத்துகின்றன: லாரிகள் சரக்குகளை வழங்குகின்றன, அதே நேரத்தில் கார்கள் உணவு, பொதிகள் மற்றும் பலவற்றை வழங்குகின்றன. 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. உங்கள் கட்டமைப்பு அல்லது நூலகத்தின் பகுதிகளை நீட்டிக்க பயனர்களை அனுமதிக்க விரும்பினால்.

பயனர்கள் உங்கள் கட்டமைப்பு வகுப்புகளை பரம்பரை மூலம் நீட்டிக்க முடியும். ஆனால் இந்த புதிய வகுப்புகளின் பொருட்களை தரநிலையானவற்றை விட கட்டமைப்பை எவ்வாறு உருவாக்குவது?

தீர்வாக பயனர்கள் கூறுகளை மட்டும் நீட்டிக்க அனுமதிப்பது, ஆனால் அந்த கூறுகளை உருவாக்கும் வகுப்புகள். இதற்கு, உருவாக்கும் வகுப்புகள் வரையறுக்கக்கூடிய குறிப்பிட்ட உருவாக்க முறைகளைக் கொண்டிருக்க வேண்டும்.

நன்மைகள்

  • குறிப்பிட்ட போக்குவரத்து வகுப்புகளிலிருந்து ஒரு வகுப்பைத் துண்டிக்கிறது.
  • போக்குவரத்து வடிவங்களை உருவாக்குவதற்கான குறியீட்டை ஒரே இடத்தில் வைத்து, குறியீட்டைப் பராமரிப்பதை எளிதாக்குகிறது.
  • திட்டத்தில் புதிய போக்குவரத்து முறைகளைச் சேர்ப்பதை எளிதாக்குகிறது.
  • திறந்த மூடிய கொள்கையை செயல்படுத்துகிறது.

தீமைகள்

ஒவ்வொரு தயாரிப்பு வகுப்பிற்கும் அதன் சொந்த கிரியேட்டர் துணைப்பிரிவு இருக்க வேண்டும் என்பதால், பெரிய இணை வகுப்பு படிநிலைகளுக்கு வழிவகுக்கும்.

சுருக்கமாகக் கூறுவோம்

நீங்கள் தொழிற்சாலை முறை முறையைப் பற்றி அறிந்து கொண்டீர்கள் மற்றும் சாத்தியமான ஒரு செயல்படுத்தலைப் பார்த்தீர்கள். பிற பொருட்களை உருவாக்குவதற்கான பொருட்களை வழங்கும் பல்வேறு நூலகங்களில் இந்த முறை பெரும்பாலும் பயன்படுத்தப்படுகிறது.

உங்கள் முக்கிய வணிக தர்க்கத்துடன் தொடர்புகொள்வதற்கும் வெவ்வேறு சூழல்களால் உங்கள் குறியீட்டை ஊதிப் பெருக்காமல் இருப்பதற்கும் ஏற்கனவே உள்ள வகுப்புகளின் துணைப்பிரிவுகளின் புதிய பொருட்களை எளிதாகச் சேர்க்க விரும்பும் போது தொழிற்சாலை முறை முறையைப் பயன்படுத்தவும்.