JavaRush /Блоги Java /Random-TG /Намунаи тарҳрезии завод

Намунаи тарҳрезии завод

Дар гурӯҳ нашр шудааст
Салом, дуст! Имрӯз мо омӯзиши намунаҳои тарроҳиро бо шумо идома медиҳем. Дар ин лекция мо дар бораи Фабрика сухан меронем. Мо бо шумо муҳокима хоҳем кард, ки бо истифода аз ин қолаб кадом мушкилот ҳал карда мешавад ва ба мисоли он, ки чӣ гуна корхона дар кушодани қаҳвахона кӯмак мекунад, бубинем. Ва ман инчунин ба шумо 5 қадами оддиро барои сохтани як корхона медиҳам. Намунаи тарроҳии завод - 1Барои он ки бо ҳама дар як саҳифа бошед ва моҳиятро ба осонӣ дарк кунед, шумо бояд бо мавзӯъҳои зерин ошно бошед:
  • Мерос дар Java
  • Маҳдуд ва васеъ кардани намудҳои истинод дар Java
  • Муносибати байни синфҳо ва an objectҳои гуногун

Фабрика чист?

Намунаи тарроҳии завод ба шумо имкон медиҳад, ки эҷоди an objectҳоро назорат кунед. Раванди эҷоди an objectи нав он қадар оддӣ нест, аммо он ҳам мураккаб нест. Мо ҳама медонем, ки барои сохтани an objectи нав мо бояд new. Ва шояд ба назар чунин мерасад, ки дар ин ҷо ҳеҷ чиз идора карда намешавад, аммо ин тавр нест. Вақте ки барномаи мо дорои синфи муайяне, ки наслҳои зиёд дорад, душвориҳо ба миён омада метавонанд ва вобаста ба баъзе шароитҳо намунаи синфи муайянро эҷод кардан лозим аст. Фабрика як намунаи тарроҳӣ мебошад, ки ба ҳалли масъалаи эҷоди an objectҳои гуногун вобаста ба баъзе шароит кӯмак мекунад. Абстрактӣ, ҳамин тавр не? Вақте ки мо ба мисоли зер нигаред, мушаххас ва возеҳи бештар пайдо мешавад.

Мо намудҳои гуногуни қаҳва эҷод мекунем

Фарз мекунем, ки мо қаҳвахонаро автоматӣ кардан мехоҳем. Мо бояд тарзи тайёр кардани навъҳои гуногуни қаҳваро омӯзем. Барои ин, дар замимаи мо мо синфи қаҳва ва ҳосилаҳои онро эҷод мекунем: Americano, капучино, эспрессо, латте - намудҳои қаҳва, ки мо омода мекунем. Биёед бо синфи умумии қаҳва оғоз кунем:
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
}
Аҷоиб, ҳоло биёед codeи қаҳвахонаи худро нависед:
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. Агар диапазон тағир ёбад, мо набояд codeро дар ҳама ҷое, ки эҷоди қаҳва истифода мешавад, таҳрир кунем. Танҳо дар як ҷо иваз кардани code кофӣ хоҳад буд.
Бо ибораи дигар гуем, вакти он расидааст, ки заводро ихтисор кунем.

Мо заводи якуми худро арра карда истодаем

Барои ин, биёед як синфи нав эҷод кунем, ки танҳо барои эҷоди мисолҳои зарурии синфҳои қаҳва масъул хоҳад буд:
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;
    }
}
Табрик мекунем! Мо наваHow намунаи тарҳрезии Фабрикаро дар шакли соддатаринаш амалӣ кардем. Ҳарчанд ҳама чиз метавонад боз ҳам соддатар бошад, агар ин усул статикӣ бошад 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. Дар барномаи худ шумо як синф бо якчанд наслҳо доред, чуноне ки дар расм дар зер оварда шудааст: Намунаи тарҳрезии завод - 2Қадами 2. Шумо синферо эҷод мекунед enum, ки дар он шумо тағирёбандаи enum-ро барои ҳар як синфи насл муайян мекунед:
enum CatType {
    LION,
    TIGER,
    BARSIK
}
Қадами 3. Шумо корхонаи худро месозед. Шумо онро даъват мекунед MyClassFactory, code дар зер аст:
class CatFactory {}
Қадами 4. Шумо дар корхонаи худ усулеро эҷод мекунед createMyClass, ки тағирёбандаи - enum MyClassType. Рамзи дар поён:
class CatFactory {
    public Cat createCat(CatType type) {

    }
}
Қадами 5. Шумо блокро дар бадани усул менависед, switch-caseки дар он шумо тамоми арзишҳои рақамиро такрор мекунед ва як намунаи синфи мувофиқро ба 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;
        }
    }
Мисли саркор.

Чӣ тавр машқ кардан

Хондан хуб аст, навиштани code боз ҳам беҳтар аст. Агар номи шумо шумораи ҷуфт ҳарф дошта бошад, кӯшиш кунед, ки пиццерияи виртуалии худро созед. Агар номи шумо шумораи тоқ ҳарфҳо дошта бошад, кӯшиш кунед, ки сатри сушии виртуалӣ созед. Агар шумо беном бошед, шумо хушбахт ҳастед. Имрӯз шумо метавонед истироҳат кунед.
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION