JavaRush/Java Π±Π»ΠΎΠ³/Random UA/ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктування Factory

ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктування Factory

Бтаття Π· Π³Ρ€ΡƒΠΏΠΈ Random UA
учасників
ΠŸΡ€ΠΈΠ²Ρ–Ρ‚ Π΄Ρ€ΡƒΠ³! Π‘ΡŒΠΎΠ³ΠΎΠ΄Π½Ρ– ΠΌΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ²ΠΆΠΈΠΌΠΎ Π²ΠΈΠ²Ρ‡Π°Ρ‚ΠΈ Π· Ρ‚ΠΎΠ±ΠΎΡŽ ΠΏΠ°Ρ‚Π΅Ρ€Π½ΠΈ проСктування. Π£ Ρ†Ρ–ΠΉ Π»Π΅ΠΊΡ†Ρ–Ρ— Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΠΈΠΌΠ΅ΠΌΠΎ ΠΏΡ€ΠΎ Π€Π°Π±Ρ€ΠΈΠΊΠ°. ΠžΠ±Π³ΠΎΠ²ΠΎΡ€ΠΈΠΌΠΎ Π· Ρ‚ΠΎΠ±ΠΎΡŽ, яку ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ Π²ΠΈΡ€Ρ–ΡˆΡƒΡŽΡ‚ΡŒ Π·Π° допомогою Π΄Π°Π½ΠΎΠ³ΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, подивимося Π½Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ– Ρ‚ΠΎΠ³ΠΎ, як Ρ„Π°Π±Ρ€ΠΈΠΊΠ° Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°Ρ” Π²Ρ–Π΄ΠΊΡ€ΠΈΠ²Π°Ρ‚ΠΈ ΠΊΠ°Π²'ΡΡ€Π½ΡŽ. А Ρ‰Π΅ я Π΄Π°ΠΌ 5 простих ΠΊΡ€ΠΎΠΊΡ–Π² для створСння Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ. ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктування Factory - 1Π©ΠΎΠ± Π±ΡƒΡ‚ΠΈ Π· усіма Π½Π° ΠΎΠ΄Π½Ρ–ΠΉ Ρ…Π²ΠΈΠ»Ρ– Ρ– Π»Π΅Π³ΠΊΠΎ Π²Π»ΠΎΠ²Π»ΡŽΠ²Π°Ρ‚ΠΈ ΡΡƒΡ‚ΡŒ, Ρ‚ΠΎΠ±Ρ– ΠΌΠ°ΡŽΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ Π·Π½Π°ΠΉΠΎΠΌΡ– Ρ‚Π°ΠΊΡ– Ρ‚Π΅ΠΌΠΈ:
  • Бпадкування Π² Java
  • ЗвуТСння Ρ‚Π° Ρ€ΠΎΠ·ΡˆΠΈΡ€Π΅Π½Π½Ρ ΠΏΠΎΡΠΈΠ»Π°Π»ΡŒΠ½ΠΈΡ… Ρ‚ΠΈΠΏΡ–Π² Ρƒ Java
  • Взаємодія ΠΌΡ–ΠΆ Ρ€Ρ–Π·Π½ΠΈΠΌΠΈ класами Ρ‚Π° ΠΎΠ±'Ρ”ΠΊΡ‚Π°ΠΌΠΈ

Π©ΠΎ Ρ‚Π°ΠΊΠ΅ Π€Π°Π±Ρ€ΠΈΠΊΠ°?

Π¨Π°Π±Π»ΠΎΠ½ проСктування Π€Π°Π±Ρ€ΠΈΠΊΠ° дозволяє ΠΊΠ΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ створСнням ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π². ΠŸΡ€ΠΎΡ†Π΅Ρ створСння Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±'Ρ”ΠΊΡ‚Π° Π½Π΅ Ρ‚Π΅ Ρ‰ΠΎΠ± простий, Π° ΠΉ Π½Π΅ Π½Π°Π΄Ρ‚ΠΎ складний. Усі ΠΌΠΈ Π·Π½Π°Ρ”ΠΌΠΎ, Ρ‰ΠΎ для створСння Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΎΠ±'Ρ”ΠΊΡ‚Π° Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ використовувати ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ new. Π† ΠΌΠΎΠΆΠ΅ здатися, Ρ‰ΠΎ Ρ‚ΡƒΡ‚ Π½Π΅ΠΌΠ° Ρ‡ΠΈΠΌ ΠΊΠ΅Ρ€ΡƒΠ²Π°Ρ‚ΠΈ, ΠΏΡ€ΠΎΡ‚Π΅ Ρ†Π΅ Π½Π΅ Ρ‚Π°ΠΊ. Π‘ΠΊΠ»Π°Π΄Π½ΠΎΡ‰Ρ– ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π²ΠΈΠ½ΠΈΠΊΠ½ΡƒΡ‚ΠΈ, ΠΊΠΎΠ»ΠΈ Π² Π½Π°ΡˆΠΎΠΌΡƒ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΡƒ Ρ” ΠΏΠ΅Π²Π½ΠΈΠΉ клас, який ΠΌΠ°Ρ” Π±Π΅Π·Π»Ρ–Ρ‡ спадкоємців, Ρ– Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Ρ‚ΠΈ СкзСмпляр ΠΏΠ΅Π²Π½ΠΎΠ³ΠΎ класу Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ дСяких ΡƒΠΌΠΎΠ². Π€Π°Π±Ρ€ΠΈΠΊΠ° β€” Ρ†Π΅ шаблон проСктування, який Π΄ΠΎΠΏΠΎΠΌΠ°Π³Π°Ρ” Π²ΠΈΡ€Ρ–ΡˆΠΈΡ‚ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ створСння Ρ€Ρ–Π·Π½ΠΈΡ… ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ ΡƒΠΌΠΎΠ². Абстрактно, Ρ‡ΠΈ Π½Π΅ Ρ‚Π°ΠΊ? Π‘Ρ–Π»ΡŒΡˆΠ΅ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚ΠΈΠΊΠΈ Ρ‚Π° ясності Π·'ΡΠ²ΠΈΡ‚ΡŒΡΡ, ΠΊΠΎΠ»ΠΈ ΠΌΠΈ розглянСмо ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π½ΠΈΠΆΡ‡Π΅.

Π‘Ρ‚Π²ΠΎΡ€ΡŽΡ”ΠΌΠΎ Ρ€Ρ–Π·Π½Ρ– Π²ΠΈΠ΄ΠΈ ΠΊΠ°Π²ΠΈ

ΠŸΡ€ΠΈΠΏΡƒΡΡ‚ΠΈΠΌΠΎ, ΠΌΠΈ Ρ…ΠΎΡ‡Π΅ΠΌΠΎ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΡƒΠ²Π°Ρ‚ΠΈ ΠΊΠ°Π²'ΡΡ€Π½ΡŽ. Нам Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ навчитися Π³ΠΎΡ‚ΡƒΠ²Π°Ρ‚ΠΈ Ρ€Ρ–Π·Π½Ρ– Π²ΠΈΠ΄ΠΈ ΠΊΠ°Π²ΠΈ. Для Ρ†ΡŒΠΎΠ³ΠΎ Π² Π½Π°ΡˆΠΎΠΌΡƒ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΡƒ ΠΌΠΈ створимо клас ΠΊΠ°Π²ΠΈ Ρ‚Π° Ρ—Ρ— ΠΏΠΎΡ…Ρ–Π΄Π½Ρ–: Π°ΠΌΠ΅Ρ€ΠΈΠΊΠ°Π½ΠΎ, ΠΊΠ°ΠΏΡƒΡ‡ΠΈΠ½ΠΎ, СспрСсо, Π»Π°Ρ‚Ρ‚Π΅ – Ρ‚Ρ– Π²ΠΈΠ΄ΠΈ ΠΊΠ°Π²ΠΈ, які ΠΌΠΈ Π³ΠΎΡ‚ΡƒΠ²Π°Ρ‚ΠΈΠΌΠ΅ΠΌΠΎ. ΠŸΠΎΡ‡Π½Π΅ΠΌΠΎ Ρ–Π· загального ΠΊΠ°Π²ΠΎΠ²ΠΎΠ³ΠΎ класу:
public class Coffee {
    public void grindCoffee(){
        // ΠΏΠ΅Ρ€Π΅ΠΌΠ°Π»Ρ‹Π²Π°Π΅ΠΌ ΠΊΠΎΡ„Π΅
    }
    public void makeCoffee(){
        // Π΄Π΅Π»Π°Π΅ΠΌ ΠΊΠΎΡ„Π΅
    }
    public void pourIntoCup(){
        // Π½Π°Π»ΠΈΠ²Π°Π΅ΠΌ Π² Ρ‡Π°ΡˆΠΊΡƒ
    }
}
Π”Π°Π»Ρ– створимо ΠΉΠΎΠ³ΠΎ спадкоємців:
public class Americano extends Coffee {}
public class Cappuccino extends Coffee {}
public class CaffeLatte extends Coffee {}
public class Espresso extends Coffee {}
ΠΠ°ΡˆΡ– ΠΊΠ»Ρ–Ρ”Π½Ρ‚ΠΈ Π·Π°ΠΌΠΎΠ²Π»ΡΡ‚ΠΈΠΌΡƒΡ‚ΡŒ Π±ΡƒΠ΄ΡŒ-який Π²ΠΈΠ΄ ΠΊΠ°Π²ΠΈ, Ρ– Ρ†ΡŽ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΡ–. Π¦Π΅ ΠΌΠΎΠΆΠ½Π° Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ Ρ€Ρ–Π·Π½ΠΈΠΌΠΈ способами, Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, використовувати String. АлС Π½Π°ΠΉΠΊΡ€Π°Ρ‰Π΅ для Ρ†ΠΈΡ… Ρ†Ρ–Π»Π΅ΠΉ ΠΏΡ–Π΄Ρ–ΠΉΠ΄Π΅ 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("Π’ΠΎΡ‚ ваш ΠΊΠΎΡ„Π΅! Бпасибо, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π΅Ρ‰Π΅!");
        return coffee;
    }
}
ΠœΠ΅Ρ‚ΠΎΠ΄ orderCoffeeΠΌΠΎΠΆΠ½Π° Ρ€ΠΎΠ·Π΄Ρ–Π»ΠΈΡ‚ΠΈ Π½Π° Π΄Π²Ρ– складові:
  1. БтворСння ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ СкзСмпляра ΠΊΠ°Π²ΠΈ Π² Π±Π»ΠΎΡ†Ρ– switch-case. Π‘Π°ΠΌΠ΅ Ρ‚ΡƒΡ‚ Π²Ρ–Π΄Π±ΡƒΠ²Π°Ρ”Ρ‚ΡŒΡΡ Ρ‚Π΅, Ρ‰ΠΎ Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Π€Π°Π±Ρ€ΠΈΠΊΠ° – створСння ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΡƒ, Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ ΡƒΠΌΠΎΠ².
  2. Π‘Π°ΠΌΠ΅ приготування - ΠΏΠ΅Ρ€Π΅ΠΌΠΎΠ»ΠΊΠ°, приготування Ρ‚Π° розлиття Π² Ρ‡Π°ΡˆΠΊΡƒ.
Π©ΠΎ Π²Π°ΠΆΠ»ΠΈΠ²ΠΎ Π·Π½Π°Ρ‚ΠΈ, якщо ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π±ΡƒΠ΄Π΅ вносити Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π·ΠΌΡ–Π½ΠΈ Π² ΠΌΠ°ΠΉΠ±ΡƒΡ‚Π½ΡŒΠΎΠΌΡƒ:
  1. Π‘Π°ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ приготування (ΠΏΠ΅Ρ€Π΅ΠΌΠΎΠ»ΠΊΠ°, приготування Ρ‚Π° розлиття Ρƒ Ρ‡Π°ΡˆΠΊΡƒ) Π·Π°Π»ΠΈΡˆΠΈΡ‚ΡŒΡΡ Π½Π΅Π·ΠΌΡ–Π½Π½ΠΈΠΌ (ΠΏΡ€ΠΈΠ½Π°ΠΉΠΌΠ½Ρ– ΠΌΠΈ Π½Π° Ρ†Π΅ Ρ€ΠΎΠ·Ρ€Π°Ρ…ΠΎΠ²ΡƒΡ”ΠΌΠΎ).
  2. А ось асортимСнт ΠΊΠ°Π²ΠΈ ΠΌΠΎΠΆΠ΅ змінитися. МоТливо, ΠΌΠΈ ΠΏΠΎΡ‡Π½Π΅ΠΌΠΎ Π³ΠΎΡ‚ΡƒΠ²Π°Ρ‚ΠΈ ΠΌΠΎΠΊ. Мокка. ΠœΠΎΠΊΠΊΠ°Ρ‡Ρ–β€¦ Π“ΠΎΡΠΏΠΎΠ΄ΡŒ Π· Π½ΠΈΠΌ, Π½ΠΎΠ²ΠΈΠΉ Π²ΠΈΠ΄ ΠΊΠ°Π²ΠΈ.
Ми Π²ΠΆΠ΅ Π·Π°Ρ€Π°Π· ΠΌΠΎΠΆΠ΅ΠΌΠΎ припустити, Ρ‰ΠΎ Π² ΠΌΠ°ΠΉΠ±ΡƒΡ‚Π½ΡŒΠΎΠΌΡƒ, Π· пСвною Ρ‡Π°ΡΡ‚ΠΊΠΎΡŽ ймовірності, Π½Π°ΠΌ Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ вносити Π·ΠΌΡ–Π½ΠΈ Π΄ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ, Π±Π»ΠΎΠΊΡƒ switch-case. Π’Π°ΠΊΠΎΠΆ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ, Π² Π½Π°ΡˆΡ–ΠΉ ΠΊΠ°Π²'ярні ΠΌΠ΅Ρ‚ΠΎΠ΄ orderCoffeeΠ±ΡƒΠ΄Π΅ Π½Π΅ Ρ”Π΄ΠΈΠ½ΠΈΠΌ місцСм, Π² якому ΠΌΠΈ ΡΡ‚Π²ΠΎΡ€ΡŽΠ²Π°Ρ‚ΠΈΠΌΠ΅ΠΌΠΎ Ρ€Ρ–Π·Π½Ρ– Π²ΠΈΠ΄ΠΈ ΠΊΠ°Π²ΠΈ. ΠžΡ‚ΠΆΠ΅, вносити Π·ΠΌΡ–Π½ΠΈ Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ Ρƒ ΠΊΡ–Π»ΡŒΠΊΠΎΡ… місцях. Π’ΠΎΠ±Ρ– Π²ΠΆΠ΅ Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Π»ΠΎ, Π΄ΠΎ Ρ‡ΠΎΠ³ΠΎ я Ρ…ΠΈΠ»ΡŽ. Нам ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Ρ€Π΅Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΡ‚ΠΈ. ВинСсти Π±Π»ΠΎΠΊ, який Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ” Π·Π° створСння ΠΊΠ°Π²ΠΈ, Π² ΠΎΠΊΡ€Π΅ΠΌΠΈΠΉ клас Ρ–Π· Π΄Π²ΠΎΡ… ΠΏΡ€ΠΈΡ‡ΠΈΠ½:
  1. Ми Π·ΠΌΠΎΠΆΠ΅ΠΌΠΎ пСрСвикористовувати Π»ΠΎΠ³Ρ–ΠΊΡƒ створСння ΠΊΠ°Π²ΠΈ Π² Ρ–Π½ΡˆΠΈΡ… місцях.
  2. Π―ΠΊΡ‰ΠΎ асортимСнт Π·ΠΌΡ–Π½ΠΈΡ‚ΡŒΡΡ, Π½Π°ΠΌ Π½Π΅ Π΄ΠΎΠ²Π΅Π΄Π΅Ρ‚ΡŒΡΡ ΠΏΡ€Π°Π²ΠΈΡ‚ΠΈ ΠΊΠΎΠ΄ ΡΠΊΡ€Ρ–Π·ΡŒ, Π΄Π΅ Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΠ²Π°Ρ‚ΠΈΠΌΠ΅Ρ‚ΡŒΡΡ створСння ΠΊΠ°Π²ΠΈ. Π”ΠΎΡΡ‚Π°Ρ‚Π½ΡŒΠΎ Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ ΠΊΠΎΠ΄ Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ місці.
Π†Π½ΡˆΠΈΠΌΠΈ словами, настав час запиляти Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ.

Пабомо Π½Π°ΡˆΡƒ ΠΏΠ΅Ρ€ΡˆΡƒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ

Для Ρ†ΡŒΠΎΠ³ΠΎ створимо Π½ΠΎΠ²ΠΈΠΉ клас, який Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ‚ΠΈΠΌΠ΅ лишС Π·Π° створСння ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΈΡ… СкзСмплярів класів ΠΊΠ°Π²ΠΈ:
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статичним. АлС Ρ‚ΠΎΠ΄Ρ– ΠΌΠΈ Π²Ρ‚Ρ€Π°Ρ‚Π°Π±ΠΎ Π΄Π²Ρ– моТливості:
  1. успадковуватися Π²Ρ–Π΄ SimpleCoffeeFactoryΡ– ΠΏΠ΅Ρ€Π΅Π²ΠΈΠ·Π½Π°Ρ‡Π°Ρ‚ΠΈ ΠΌΠ΅Ρ‚ΠΎΠ΄ createCoffee.
  2. Π’ΠΏΡ€ΠΎΠ²Π°Π΄ΠΆΡƒΠ²Π°Ρ‚ΠΈ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρƒ Ρ€Π΅Π°Π»Ρ–Π·Π°Ρ†Ρ–ΡŽ Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Ρƒ Π½Π°ΡˆΡ– класи.
Π”ΠΎ Ρ€Π΅Ρ‡Ρ–, ΠΏΡ€ΠΎ впровадТСння. Нам ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ повСрнутися Π΄ΠΎ ΠΊΠ°Π²'ярні Ρ‚Π° Π²ΠΏΡ€ΠΎΠ²Π°Π΄ΠΈΡ‚ΠΈ Π½Π°ΡˆΡƒ Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ Π·Ρ– створСння ΠΊΠ°Π²ΠΈ.

Використання Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ Π² ΠΊΠ°Π²'ΡΡ€Π½ΡŽ

ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌΠΎ клас Π½Π°ΡˆΠΎΡ— ΠΊΠ°Π²'ярні Π· використанням Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ:
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("Π’ΠΎΡ‚ ваш ΠΊΠΎΡ„Π΅! Бпасибо, ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚Π΅ Π΅Ρ‰Π΅!");
        return coffee;
    }
}
Π§ΡƒΠ΄ΠΎΠ²ΠΎ. Π’Π΅ΠΏΠ΅Ρ€ схСматично Ρ‚Π° Π»Π°ΠΊΠΎΠ½Ρ–Ρ‡Π½ΠΎ спробуємо описати структуру ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ проСктування Π€Π°Π±Ρ€ΠΈΠΊΠ°.

5 ΠΊΡ€ΠΎΠΊΡ–Π² Π΄ΠΎ відкриття власної Ρ„Π°Π±Ρ€ΠΈΠΊΠΈ

ΠšΡ€ΠΎΠΊ 1. Π£ Ρ‚Π΅Π±Π΅ Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΡ– клас Ρ–Π· ΠΊΡ–Π»ΡŒΠΊΠΎΠΌΠ° Π½Π°Ρ‰Π°Π΄ΠΊΠ°ΠΌΠΈ, як Π½Π° ΠΌΠ°Π»ΡŽΠ½ΠΊΡƒ Π½ΠΈΠΆΡ‡Π΅: ΠŸΠ°Ρ‚Ρ‚Π΅Ρ€Π½ проСктування Factory - 2ΠšΡ€ΠΎΠΊ 2. Π’ΠΈ ΡΡ‚Π²ΠΎΡ€ΡŽΡ”Ρˆ enum, Π² якому Π²ΠΈΠ·Π½Π°Ρ‡Π°Ρ”Ρˆ enum-Π·ΠΌΡ–Π½Π½Ρƒ для ΠΊΠΎΠΆΠ½ΠΎΠ³ΠΎ класу-спадкоємця:
enum CatType {
    LION,
    TIGER,
    BARSIK
}
ΠšΡ€ΠΎΠΊ 3. Π’ΠΈ Π±ΡƒΠ΄ΡƒΡ”Ρˆ свою Ρ„Π°Π±Ρ€ΠΈΠΊΡƒ. ΠΠ°Π·ΠΈΠ²Π°Ρ”Ρˆ Ρ—Ρ— MyClassFactory, ΠΊΠΎΠ΄ Π½ΠΈΠΆΡ‡Π΅:
class CatFactory {}
ΠšΡ€ΠΎΠΊ 4. Π’ΠΈ ΡΡ‚Π²ΠΎΡ€ΡŽΡ”Ρˆ Ρƒ своїй Ρ„Π°Π±Ρ€ΠΈΡ†Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄ createMyClass, який ΠΏΡ€ΠΈΠΉΠΌΠ°Ρ” Π·ΠΌΡ–Π½Π½Ρƒ- enum MyClassType. Код Π½ΠΈΠΆΡ‡Π΅:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
ΠšΡ€ΠΎΠΊ 5. Π’ΠΈ пишСш Ρƒ Ρ‚Ρ–Π»Ρ– ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ Π±Π»ΠΎΠΊ switch-case, Π² якому ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Ρ”Ρˆ всі значСння enum Ρ– ΡΡ‚Π²ΠΎΡ€ΡŽΡ”Ρˆ СкзСмпляр класу, Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½ΠΈΠΉ enumΠ·Π½Π°Ρ‡Π΅Π½Π½ΡŽ:
class CatFactory {
        public Cat createCat(CatType type) {
            Cat cat = null;

            switch (type) {
                case LION:
                    cat =  new Barsik();
                    break;
                case TIGER:
                    cat = new Tiger();
                    break;
                case BARSIK:
                    cat =  new Lion();
                    break;
            }

            return cat;
        }
    }
Як бос.

Π―ΠΊ трСнуватися

Π§ΠΈΡ‚Π°Ρ‚ΠΈ - Π΄ΠΎΠ±Ρ€Π΅, писати ΠΊΠΎΠ΄ -Ρ‰Π΅ ΠΊΡ€Π°Ρ‰Π΅. Π―ΠΊΡ‰ΠΎ Ρƒ Ρ‚Π²ΠΎΡ”ΠΌΡƒ Ρ–ΠΌΠ΅Π½Ρ– ΠΏΠ°Ρ€Π½Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Π±ΡƒΠΊΠ², спробуй створити свою Π²Ρ–Ρ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρƒ ΠΏΡ–Ρ†Π΅Ρ€Ρ–ΡŽ. Π―ΠΊΡ‰ΠΎ Ρƒ Ρ‚Π²ΠΎΡ”ΠΌΡƒ Ρ–ΠΌΠ΅Π½Ρ– Π½Π΅ΠΏΠ°Ρ€Π½Π° ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Π»Ρ–Ρ‚Π΅Ρ€, спробуй створити Π²Ρ–Ρ€Ρ‚ΡƒΠ°Π»ΡŒΠ½ΠΈΠΉ ΡΡƒΡˆΡ–-Π±Π°Ρ€. Π―ΠΊΡ‰ΠΎ Ρ‚ΠΈ Π±Π΅Π·Ρ–ΠΌΠ΅Π½Π½ΠΈΠΉ, Ρ‚ΠΎΠ±Ρ– пощастило. Π‘ΡŒΠΎΠ³ΠΎΠ΄Π½Ρ– моТСш Π²Ρ–Π΄ΠΏΠΎΡ‡ΠΈΠ²Π°Ρ‚ΠΈ.
ΠšΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€Ρ–
  • популярні
  • Π½ΠΎΠ²Ρ–
  • старі
Π©ΠΎΠ± Π·Π°Π»ΠΈΡˆΠΈΡ‚ΠΈ ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€, ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π²Π²Ρ–ΠΉΡ‚ΠΈ Π² систСму
Для Ρ†Ρ–Ρ”Ρ— сторінки Π½Π΅ΠΌΠ°Ρ” ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€Ρ–Π².