CodeGym/Java Blog/சீரற்ற/வடிவமைப்பு வடிவங்கள்: சுருக்கம் தொழிற்சாலை
John Squirrels
நிலை 41
San Francisco

வடிவமைப்பு வடிவங்கள்: சுருக்கம் தொழிற்சாலை

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

ஒரு சுருக்க தொழிற்சாலை என்ன சிக்கல்களை தீர்க்கிறது?

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

எங்கள் காபி ஷாப்பை தானியங்குபடுத்துவதைத் தொடரலாம்

கடைசி பாடத்தில், தொழிற்சாலை முறை முறையைப் படித்தோம். எங்கள் காபி வணிகத்தை விரிவுபடுத்தவும், பல புதிய இடங்களைத் திறக்கவும் இதைப் பயன்படுத்தினோம். இன்று நாங்கள் எங்கள் வணிகத்தை தொடர்ந்து நவீனமயமாக்குவோம். சுருக்கமான தொழிற்சாலை வடிவத்தைப் பயன்படுத்தி, ஆன்லைனில் காபியை ஆர்டர் செய்வதற்கான புதிய டெஸ்க்டாப் பயன்பாட்டிற்கான அடித்தளத்தை அமைப்போம். டெஸ்க்டாப் அப்ளிகேஷனை எழுதும்போது, ​​கிராஸ்-பிளாட்ஃபார்ம் ஆதரவைப் பற்றி நாம் எப்போதும் சிந்திக்க வேண்டும். எங்கள் பயன்பாடு MacOS மற்றும் Windows இரண்டிலும் வேலை செய்ய வேண்டும் (ஸ்பாய்லர்: நீங்கள் வீட்டுப்பாடமாக செயல்படுத்த Linux க்கான ஆதரவு உள்ளது). எங்கள் விண்ணப்பம் எப்படி இருக்கும்? மிகவும் எளிமையானது: இது உரைப் புலம், தேர்வுப் புலம் மற்றும் பொத்தானைக் கொண்ட ஒரு படிவமாக இருக்கும். வெவ்வேறு இயக்க முறைமைகளைப் பயன்படுத்துவதில் உங்களுக்கு அனுபவம் இருந்தால், விண்டோஸில் உள்ள பொத்தான்கள் மேக்கை விட வித்தியாசமாக வழங்கப்படுவதை நீங்கள் நிச்சயமாக கவனித்திருப்பீர்கள். எல்லாவற்றையும் போலவே... சரி, ஆரம்பிக்கலாம்.
  • பொத்தான்கள்
  • உரை புலங்கள்
  • தேர்வு துறைகள்
onClickமறுப்பு: ஒவ்வொரு இடைமுகத்திலும், , onValueChanged, அல்லது போன்ற முறைகளை நாம் வரையறுக்கலாம் onInputChanged. வேறு வார்த்தைகளில் கூறுவதானால், பல்வேறு நிகழ்வுகளைக் கையாள அனுமதிக்கும் முறைகளை நாம் வரையறுக்கலாம் (பொத்தானை அழுத்துவது, உரையை உள்ளிடுவது, தேர்வுப் பெட்டியில் மதிப்பைத் தேர்ந்தெடுப்பது). உதாரணத்தை ஓவர்லோட் செய்யாமல் இருப்பதற்காகவும், தொழிற்சாலை வடிவத்தைப் படிக்கும்போது அதை தெளிவாக்குவதற்காகவும் இவை அனைத்தும் இங்கு வேண்டுமென்றே தவிர்க்கப்பட்டுள்ளன. எங்கள் தயாரிப்புகளுக்கான சுருக்க இடைமுகங்களை வரையறுப்போம்:
public interface Button {}
public interface Select {}
public interface TextField {}
ஒவ்வொரு இயக்க முறைமைக்கும், இயக்க முறைமையின் பாணியில் இடைமுக கூறுகளை உருவாக்க வேண்டும். Windows மற்றும் MacOS க்கான குறியீடுகளை எழுதுவோம். விண்டோஸிற்கான செயலாக்கங்களை உருவாக்குவோம்:
public class WindowsButton implements Button {
}

public class WindowsSelect implements Select {
}

public class WindowsTextField implements TextField {
}
இப்போது நாங்கள் MacOS க்கும் அதையே செய்கிறோம்:
public class MacButton implements Button {
}

public class MacSelect implements Select {
}

public class MacTextField implements TextField {
}
சிறப்பானது. இப்போது நாம் எங்கள் சுருக்கத் தொழிற்சாலைக்குச் செல்லலாம், இது கிடைக்கக்கூடிய அனைத்து சுருக்க தயாரிப்பு வகைகளையும் உருவாக்கும்:
public interface GUIFactory {

    Button createButton();
    TextField createTextField();
    Select createSelect();

}
சூப்பர். நீங்கள் பார்க்க முடியும் என, நாங்கள் இன்னும் சிக்கலான எதையும் செய்யவில்லை. பின்வருபவை அனைத்தும் எளிமையானவை. தயாரிப்புகளுடன் ஒப்புமை மூலம், ஒவ்வொரு OS க்கும் பல்வேறு தொழிற்சாலை செயலாக்கங்களை உருவாக்குகிறோம். விண்டோஸ் உடன் தொடங்குவோம்:
public class WindowsGUIFactory implements GUIFactory {
    public WindowsGUIFactory() {
        System.out.println("Creating GUIFactory for Windows OS");
    }

    public Button createButton() {
        System.out.println("Creating Button for Windows OS");
        return new WindowsButton();
    }

    public TextField createTextField() {
        System.out.println("Creating TextField for Windows OS");
        return new WindowsTextField();
    }

    public Select createSelect() {
        System.out.println("Creating Select for Windows OS");
        return new WindowsSelect();
    }
}
என்ன நடக்கிறது என்பதை மேலும் விளக்குவதற்காக, முறைகள் மற்றும் கன்ஸ்ட்ரக்டருக்குள் சில கன்சோல் வெளியீட்டைச் சேர்த்துள்ளோம். இப்போது MacOS க்கு:
public class MacGUIFactory implements GUIFactory {
    public MacGUIFactory() {
        System.out.println("Creating GUIFactory for macOS");
    }

    @Override
    public Button createButton() {
        System.out.println("Creating Button for macOS");
        return new MacButton();
    }

    @Override
    public TextField createTextField() {
        System.out.println("Creating TextField for macOS");
        return new MacTextField();
    }

    @Override
    public Select createSelect() {
        System.out.println("Creating Select for macOS");
        return new MacSelect();
    }
}
ஒவ்வொரு முறை கையொப்பமும் முறை ஒரு சுருக்க வகையை வழங்குகிறது என்பதை நினைவில் கொள்க. ஆனால் முறைகளுக்குள், தயாரிப்புகளின் குறிப்பிட்ட செயலாக்கங்களை உருவாக்குகிறோம். குறிப்பிட்ட நிகழ்வுகளை உருவாக்குவதை நாங்கள் கட்டுப்படுத்தும் ஒரே இடம் இதுதான். படிவத்திற்கு ஒரு வகுப்பை எழுத வேண்டிய நேரம் இது. இது ஒரு ஜாவா வகுப்பாகும், அதன் புலங்கள் இடைமுக கூறுகளாகும்:
public class CoffeeOrderForm {
    private final TextField customerNameTextField;
    private final Select coffeeTypeSelect;
    private final Button orderButton;

    public CoffeeOrderForm(GUIFactory factory) {
        System.out.println("Creating coffee order form");
        customerNameTextField = factory.createTextField();
        coffeeTypeSelect = factory.createSelect();
        orderButton = factory.createButton();
    }
}
இடைமுக கூறுகளை உருவாக்கும் ஒரு சுருக்க தொழிற்சாலை படிவத்தின் கட்டமைப்பாளருக்கு அனுப்பப்படுகிறது. ஒரு குறிப்பிட்ட OS க்கான இடைமுக கூறுகளை உருவாக்க, தேவையான தொழிற்சாலை செயலாக்கத்தை கட்டமைப்பாளருக்கு அனுப்புவோம்.
public class Application {
    private CoffeeOrderForm coffeeOrderForm;

    public void drawCoffeeOrderForm() {
        // Determine the name of the operating system through System.getProperty()
        String osName = System.getProperty("os.name").toLowerCase();
        GUIFactory guiFactory;

        if (osName.startsWith("win")) { // For Windows
            guiFactory = new WindowsGUIFactory();
        } else if (osName.startsWith("mac")) { // For Mac
            guiFactory = new MacGUIFactory();
        } else {
            System.out.println("Unknown OS. Unable to draw form :(");
            return;
        }
        coffeeOrderForm = new CoffeeOrderForm(guiFactory);
    }

    public static void main(String[] args) {
        Application application = new Application();
        application.drawCoffeeOrderForm();
    }
}
விண்டோஸில் பயன்பாட்டை இயக்கினால், பின்வரும் வெளியீட்டைப் பெறுவோம்:
Creating GUIFactory for Windows OS
Creating coffee order form
Creating TextField for Windows OS
Creating Select for Windows OS
Creating Button for Windows OS
Mac இல், வெளியீடு பின்வருமாறு இருக்கும்:
Creating GUIFactory for macOS
Creating coffee order form
Creating TextField for macOS
Creating Select for macOS
Creating Button for macOS
லினக்ஸில்:
Unknown OS. Unable to draw form :(
இப்போது நாம் சுருக்கமாக. GUI-அடிப்படையிலான பயன்பாட்டின் எலும்புக்கூட்டை நாங்கள் எழுதினோம், அதில் இடைமுக உறுப்புகள் குறிப்பாக தொடர்புடைய OS க்காக உருவாக்கப்பட்டன. நாங்கள் உருவாக்கியதை சுருக்கமாக மீண்டும் செய்வோம்:
  • உள்ளீட்டு புலம், தேர்வு புலம் மற்றும் பொத்தான் ஆகியவற்றைக் கொண்ட தயாரிப்புக் குடும்பம்.
  • Windows மற்றும் macOS க்கான தயாரிப்பு குடும்பத்தின் வெவ்வேறு செயலாக்கங்கள்.
  • எங்கள் தயாரிப்புகளை உருவாக்குவதற்கான இடைமுகத்தை வரையறுக்கும் ஒரு சுருக்கமான தொழிற்சாலை.
  • எங்கள் தொழிற்சாலையின் இரண்டு செயலாக்கங்கள், ஒவ்வொன்றும் ஒரு குறிப்பிட்ட குடும்ப தயாரிப்புகளை உருவாக்குவதற்கு பொறுப்பாகும்.
  • ஒரு வடிவம் (ஒரு ஜாவா வகுப்பு) அதன் புலங்கள் சுருக்கமான இடைமுக கூறுகளாகும், அவை சுருக்கமான தொழிற்சாலையைப் பயன்படுத்தி கட்டமைப்பாளரில் தேவையான மதிப்புகளுடன் தொடங்கப்படுகின்றன.
  • பயன்பாட்டு வகுப்பு இந்த வகுப்பிற்குள், நாங்கள் ஒரு படிவத்தை உருவாக்குகிறோம், விரும்பிய தொழிற்சாலை செயலாக்கத்தை அதன் கட்டமைப்பாளருக்கு அனுப்புகிறோம்.
இதன் விளைவு என்னவென்றால், நாங்கள் சுருக்கமான தொழிற்சாலை முறையை செயல்படுத்தினோம்.

சுருக்கம் தொழிற்சாலை: எப்படி பயன்படுத்துவது

ஒரு சுருக்க தொழிற்சாலை என்பது கான்கிரீட் தயாரிப்பு வகுப்புகளுடன் இணைக்கப்படாமல் பல்வேறு தயாரிப்பு குடும்பங்களை உருவாக்குவதை நிர்வகிப்பதற்கான ஒரு வடிவமைப்பு வடிவமாகும். இந்த வடிவத்தைப் பயன்படுத்தும் போது, ​​​​நீங்கள் கண்டிப்பாக:
  1. தயாரிப்பு குடும்பங்களை வரையறுக்கவும். அவற்றில் இரண்டு எங்களிடம் உள்ளன என்று வைத்துக்கொள்வோம்:
    • SpecificProductA1,SpecificProductB1
    • SpecificProductA2,SpecificProductB2
  2. குடும்பத்தில் உள்ள ஒவ்வொரு தயாரிப்புக்கும், ஒரு சுருக்க வகுப்பை (இடைமுகம்) வரையறுக்கவும். எங்கள் விஷயத்தில், எங்களிடம் உள்ளது:
    • ProductA
    • ProductB
  3. ஒவ்வொரு தயாரிப்பு குடும்பத்திலும், ஒவ்வொரு தயாரிப்பும் படி 2 இல் வரையறுக்கப்பட்ட இடைமுகத்தை செயல்படுத்த வேண்டும்.
  4. படி 2 இல் வரையறுக்கப்பட்ட ஒவ்வொரு தயாரிப்பையும் உருவாக்கும் முறைகளுடன் ஒரு சுருக்கமான தொழிற்சாலையை உருவாக்கவும். எங்கள் விஷயத்தில், இந்த முறைகள்:
    • ProductA createProductA();
    • ProductB createProductB();
  5. சுருக்கமான தொழிற்சாலை செயலாக்கங்களை உருவாக்கவும், இதனால் ஒவ்வொரு செயலாக்கமும் ஒரு குடும்பத்தின் தயாரிப்புகளை உருவாக்குவதைக் கட்டுப்படுத்துகிறது. இதைச் செய்ய, சுருக்க தொழிற்சாலையின் ஒவ்வொரு செயலாக்கத்திலும், நீங்கள் அனைத்து படைப்பு முறைகளையும் செயல்படுத்த வேண்டும், இதனால் அவை குறிப்பிட்ட தயாரிப்பு செயலாக்கங்களை உருவாக்கி திருப்பி அனுப்புகின்றன.
பின்வரும் UML வரைபடம் மேலே குறிப்பிட்டுள்ள வழிமுறைகளை விளக்குகிறது: வடிவமைப்பு வடிவங்கள்: சுருக்கம் தொழிற்சாலை - 3இப்போது இந்த வழிமுறைகளின்படி குறியீட்டை எழுதுவோம்:
// Define common product interfaces
public interface ProductA {}
public interface ProductB {}

// Create various implementations (families) of our products
public class SpecificProductA1 implements ProductA {}
public class SpecificProductB1 implements ProductB {}

public class SpecificProductA2 implements ProductA {}
public class SpecificProductB2 implements ProductB {}

// Create an abstract factory
public interface AbstractFactory {
    ProductA createProductA();
    ProductB createProductB();
}

// Implement the abstract factory in order to create products in family 1
public class SpecificFactory1 implements AbstractFactory {

    @Override
    public ProductA createProductA() {
        return new SpecificProductA1();
    }

    @Override
    public ProductB createProductB() {
        return new SpecificProductB1();
    }
}

// Implement the abstract factory in order to create products in family 2
public class SpecificFactory2 implements AbstractFactory {

    @Override
    public ProductA createProductA() {
        return new SpecificProductA2();
    }

    @Override
    public ProductB createProductB() {
        return new SpecificProductB2();
    }
}

வீட்டு பாடம்

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