வணக்கம் நண்பனே! இன்று நாம் வடிவமைப்பு வடிவங்களை தொடர்ந்து படிப்போம். இந்த பாடத்தில், நாம் தொழிற்சாலைகளைப் பற்றி பேசப் போகிறோம். இந்த முறை தீர்க்கும் சிக்கலைப் பற்றி விவாதிப்போம், மேலும் ஒரு காபி கடையைத் திறக்க ஒரு தொழிற்சாலை உங்களுக்கு எவ்வாறு உதவும் என்பதற்கான உதாரணத்தைப் பார்ப்போம். கூடுதலாக, ஒரு தொழிற்சாலையை உருவாக்க 5 எளிய வழிமுறைகளை நான் உங்களுக்கு தருகிறேன். நாம் அனைவரும் ஒரே அலைநீளத்தில் இருக்கிறோம் என்பதையும், இந்தக் கருத்தை நீங்கள் விரைவாகப் புரிந்துகொள்வீர்கள் என்பதையும் உறுதிப்படுத்த, பின்வரும் தலைப்புகளை நீங்கள் நன்கு அறிந்திருக்க வேண்டும்:
- ஜாவாவில் பரம்பரை
- ஜாவாவில் குறிப்பு வகைகளின் சுருக்கம் மற்றும் விரிவாக்கம்
- வெவ்வேறு வகுப்புகள் மற்றும் பொருள்களுக்கு இடையிலான தொடர்பு.
தொழிற்சாலை என்றால் என்ன?
தொழிற்சாலை வடிவமைப்பு முறை நீங்கள் பொருட்களை உருவாக்குவதை கட்டுப்படுத்த உதவுகிறது. ஒரு புதிய பொருளை உருவாக்கும் செயல்முறை மிகவும் எளிமையானது அல்ல, ஆனால் அது மிகவும் சிக்கலானது அல்ல.new
ஒரு புதிய பொருளை உருவாக்க ஆபரேட்டர் தேவை என்பதை நாம் அனைவரும் அறிவோம் . இங்கே கட்டுப்படுத்த எதுவும் இல்லை என்று தோன்றலாம், ஆனால் அது உண்மையல்ல. எங்கள் பயன்பாட்டில் பல சந்ததியினரைக் கொண்ட ஒரு குறிப்பிட்ட வகுப்பு உள்ளது என்று வைத்துக்கொள்வோம். சில நிபந்தனைகளைப் பொறுத்து ஒரு குறிப்பிட்ட வகுப்பின் நிகழ்வை உருவாக்க வேண்டியிருக்கும் போது சிரமங்கள் ஏற்படலாம். ஒரு தொழிற்சாலை என்பது ஒரு வடிவமைப்பு வடிவமாகும், இது சில நிபந்தனைகளைப் பொறுத்து பல்வேறு பொருட்களை உருவாக்கும் சிக்கலை தீர்க்க உதவுகிறது. ஒரு சுருக்கமான கருத்துக்கு அது எப்படி? கீழேயுள்ள உதாரணத்தைப் பார்க்கும்போது இது தெளிவாகவும் மேலும் குறிப்பிட்டதாகவும் இருக்கும்.
விதவிதமான காபி தயார் செய்வோம்
நாம் ஒரு காபி கடையை தானியக்கமாக்க விரும்புகிறோம் என்று வைத்துக்கொள்வோம். பல்வேறு வகையான காபிகளை எவ்வாறு தயாரிப்பது என்பதை எங்கள் திட்டத்திற்குக் கற்பிக்க வேண்டும். இதைச் செய்ய, அமெரிக்கனோ, கப்புசினோ, எஸ்பிரெசோ மற்றும் லேட்டே போன்ற காபி வகைகளைப் பிரதிநிதித்துவப்படுத்த ஒரு காபி வகுப்பையும் சில வழித்தோன்றல் வகுப்புகளையும் உருவாக்குவோம். பொதுவான காபி வகுப்பில் ஆரம்பிக்கலாம்:
public class Coffee {
public void grindCoffee(){
// Grind the coffee
}
public void makeCoffee(){
// Brew the coffee
}
public void pourIntoCup(){
// Pour into a cup
}
}
அடுத்து, அதன் குழந்தை வகுப்புகளை உருவாக்குவோம்:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
எங்கள் வாடிக்கையாளர்கள் எந்த வகையான காபியையும் ஆர்டர் செய்யலாம். அவர்களின் உத்தரவுகள் திட்டத்திற்கு அனுப்பப்பட வேண்டும். இதை பல வழிகளில் செய்யலாம், எடுத்துக்காட்டாக, பயன்படுத்தி String
. ஆனால் enum
இதற்கு ஒரு சிறந்தது. enum
ஆர்டர் செய்யக்கூடிய காபி வகைகளுடன் தொடர்புடைய enum புலங்களை உருவாக்கி வரையறுப்போம் :
public enum CoffeeType {
ESPRESSO,
AMERICANO,
CAFFE_LATTE,
CAPPUCCINO
}
நன்று. இப்போது எங்கள் காபி கடைக்கான குறியீட்டை எழுதுவோம்:
public class CoffeeShop {
public Coffee orderCoffee(CoffeeType type) {
Coffee coffee = null;
switch (type) {
case AMERICANO:
coffee = new Americano();
break;
case ESPRESSO:
coffee = new Espresso();
break;
case CAPPUCCINO:
coffee = new Cappucсino();
break;
case CAFFE_LATTE:
coffee = new CaffeLatte();
break;
}
coffee.grindCoffee();
coffee.makeCoffee();
coffee.pourIntoCup();
System.out.println("Here's your coffee! Thanks! Come again!");
return coffee;
}
}
முறையை orderCoffee
இரண்டு பகுதிகளாகப் பிரிக்கலாம்:
- ஒரு அறிக்கையில் காபியின் ஒரு குறிப்பிட்ட நிகழ்வை உருவாக்குதல்
switch
. இங்குதான் ஒரு தொழிற்சாலை அதைச் செய்கிறது - நிபந்தனைகளைப் பொறுத்து ஒரு குறிப்பிட்ட வகையை உருவாக்கவும். - தயாரிப்பு - இது ஒரு கோப்பையில் அரைத்து, காய்ச்சுவது மற்றும் ஊற்றுவது.
- தயாரிப்பில் ஈடுபடும் படிகள் (அரைத்தல், காய்ச்சுதல் மற்றும் ஒரு கோப்பையில் ஊற்றுதல்) மாறாமல் இருக்கும் (குறைந்தபட்சம் நாங்கள் இதை எண்ணுகிறோம்).
- ஆனால் காபிகளின் வகைப்பாடு மாறலாம். மொச்சை... ஃப்ராப்பு... மொச்சச்சி... எதுவாக இருந்தாலும் புதுவிதமான காபி.
switch
. எங்கள் காபி ஷாப்பில் orderCoffee
வெவ்வேறு வகையான காபிகளை உருவாக்கும் ஒரே இடமாக இந்த முறை இருக்காது என்பதும் சாத்தியமாகும். இதன் விளைவாக, பல இடங்களில் மாற்றங்கள் செய்யப்பட வேண்டும். நான் என்ன செய்கிறேன் என்பதை நீங்கள் ஏற்கனவே புரிந்துகொண்டிருக்கலாம். நாம் மறுபரிசீலனை செய்ய வேண்டும். காபியை உருவாக்குவதற்குப் பொறுப்பான தொகுதியை இரண்டு காரணங்களுக்காக தனி வகுப்பிற்கு நகர்த்தவும்:
- காபி தயாரிக்கும் தர்க்கத்தை நாம் மற்ற இடங்களில் மீண்டும் பயன்படுத்தலாம்.
- வகைப்படுத்தல் மாறினால், காபி உருவாக்கப்பட்ட எல்லா இடங்களிலும் குறியீட்டைத் திருத்த வேண்டியதில்லை. நமது குறியீட்டை ஒரே இடத்தில் மாற்றினால் போதும்.
எங்கள் முதல் தொழிற்சாலையை அமைக்கிறது
இதைச் செய்ய, காபி வகுப்புகளின் தேவையான நிகழ்வுகளை உருவாக்குவதற்கு மட்டுமே பொறுப்பான புதிய வகுப்பை உருவாக்குவோம்:
public class SimpleCoffeeFactory {
public Coffee createCoffee(CoffeeType type) {
Coffee coffee = null;
switch (type) {
case AMERICANO:
coffee = new Americano();
break;
case ESPRESSO:
coffee = new Espresso();
break;
case CAPPUCCINO:
coffee = new Cappucino();
break;
case CAFFE_LATTE:
coffee = new CaffeLatte();
break;
}
return coffee;
}
}
வாழ்த்துகள்! தொழிற்சாலை வடிவமைப்பு முறையை அதன் எளிமையான வடிவத்தில் (கிட்டத்தட்ட) செயல்படுத்தியுள்ளோம். நாம் முறையை நிலையானதாக மாற்றினால் அது இன்னும் எளிமையாக இருந்திருக்கும் createCoffee
. ஆனால் நாம் இரண்டு திறன்களை இழப்போம்:
SimpleCoffeeFactory
முறையை மரபுரிமையாக மாற்றும் திறன்createCoffee
.- எங்கள் வகுப்புகளுக்கு தேவையான தொழிற்சாலை செயலாக்கத்தை சேர்க்கும் திறன்.
காபி கடையில் ஒரு தொழிற்சாலையைச் சேர்த்தல்
ஒரு தொழிற்சாலையைப் பயன்படுத்தி காபி ஷாப் வகுப்பை மீண்டும் எழுதுவோம்:
public class CoffeeShop {
private final SimpleCoffeeFactory coffeeFactory;
public CoffeeShop(SimpleCoffeeFactory coffeeFactory) {
this.coffeeFactory = coffeeFactory;
}
public Coffee orderCoffee(CoffeeType type) {
Coffee coffee = coffeeFactory.createCoffee(type);
coffee.grindCoffee();
coffee.makeCoffee();
coffee.pourIntoCup();
System.out.println("Here's your coffee! Thanks! Come again!");
return coffee;
}
}
சிறப்பானது. இப்போது தொழிற்சாலை வடிவமைப்பு வடிவத்தின் பொதுவான கட்டமைப்பின் சுருக்கமான விளக்கத்தை வழங்குவோம்.
உங்கள் சொந்த தொழிற்சாலையைத் திறப்பதற்கான 5 படிகள்
படி 1. கீழே உள்ள வரைபடத்தில் உள்ளதைப் போல, உங்கள் திட்டத்தில் பல சந்ததியினருடன் ஒரு வகுப்பு உள்ளது: படி 2.enum
ஒவ்வொரு குழந்தை வகுப்பிற்கும் ஒரு புலத்துடன் நீங்கள் உருவாக்குகிறீர்கள்:
enum CatType {
LION,
TIGER,
FLUFFY
}
படி 3. உங்கள் தொழிற்சாலையை உருவாக்குங்கள். அதை அழைக்கவும் CatFactory
. குறியீடு இதோ:
class CatFactory {}
படி 4. உங்கள் தொழிற்சாலையில், createCat
ஒரு வாதத்தை எடுக்கும் முறையை உருவாக்கவும் CatType
. குறியீடு இதோ:
class CatFactory {
public Cat createCat(CatType type) {
}
}
படி 5. முறையின் உடலில், switch
enum புலங்களைக் கணக்கிடும் ஒரு அறிக்கையை எழுதவும் மற்றும் அனுப்பப்பட்ட மதிப்புக்கு ஒத்த வகுப்பின் உதாரணத்தை உருவாக்கவும் enum
:
class CatFactory {
public Cat createCat(CatType type) {
Cat cat = null;
switch (type) {
case LION:
cat = new Fluffy();
break;
case TIGER:
cat = new Tiger();
break;
case FLUFFY:
cat = new Lion();
break;
}
return cat;
}
}
இப்போது நீங்கள் முதலாளியைப் போல ஒரு தொழிற்சாலையை நடத்தலாம். :)
GO TO FULL VERSION