JavaRush /Блоги Java /Random-TG /Намунаи ороишгари Java

Намунаи ороишгари Java

Дар гурӯҳ нашр шудааст
Дар китоби «Аввал сар. Тарҳҳои тарроҳӣ» аз ҷониби Эрик Фриман ва Элизабет Робсон онро чунин муайян мекунад: Намунаи Decorator ба таври динамикӣ қобorятҳои навро ба an object таъмин мекунад ва алтернатива ба зерклассҳо барои васеъ кардани функсия мебошад. Биёед кӯшиш кунем, ки ин таърифро бо истифода аз мисол муфассалтар дида бароем. Фарз мекунем, ки шумо боз як дини муосирро эҷод кардаед ва нақша доред, ки ба мардум хидматҳои мувофиқ пешкаш кунед. Зеро тамоюлҳои муосир гиёҳхорӣ, экология, рушди инсониро дунбол мекунанд ва бо баъзе сабабҳо одамон аз динҳои “анъанавӣ” (ё дар ниҳоят атеизм) қаноатманд нестанд, пас шумо, пайравӣ аз ҷараёни асосӣ, дини дигари асри навро (як навъ синтез аз мавҷудияти мавҷуда) эҷод мекунед. динҳо, аз ҳар кадоми онҳо чизе гирифтаанд). Дар аввал шумо хидматҳои зеринро пешкаш мекунед: 1. Фолбинӣ 2. Гороскоп Яъне. Ҳама чиз чунин ба назар мерасад: Интерфейси хидматрасонӣ бо нархи албатта :) ва тавсиф вуҷуд дорад
public interface Service {
    public double getPrice();
    public String getLabel();
}
ва хизматрасонӣ
public class Divination implements Service {
    private String label;
    private double price;

    public Divination(String label, double price) {
        this.label = label;
        this.price = price;
    }

    public double getPrice() {
        return this.price;
    }

    public String getLabel() {
        return this.label;
    }
}
public class Horoscope implements Service {
    private String label;
    private double price;

    public Horoscope(String label, double price) {
        this.label = label;
        this.price = price;
    }

    public double getPrice() {
        return this.price;
    }

    public String getLabel() {
        return this.label;
    }
}
Хуб, мувофиқан, 2 фармоиш пайдо шуд (фолбинӣ бо кортҳои Tarot ва гороскопи шахсии муштарӣ):
public static void main(String[] args) {
    double cost;
    // Гадание на Таро
    Service taro = new Divination("Таро", 1000);
    // И персональный гороскоп
    Service personalHoroscope = new Horoscope("Персональный гороскоп", 9000);
    cost = taro.getPrice() + personalHoroscope.getPrice();

    System.out.println(cost);
}
ва натиҷаи барнома:
10000.0
Ҳамааш хуб мешуд, вале мисли шумо аллакай садҳо, агар ҳазорҳо не, вуҷуд доранд ва мо бояд минбаъд рушди маънавиёти одамонро идома диҳем, вагарна дигар таваҷҷуҳ надоранд. Аз ин рӯ, имконоти иловагӣ ба хидматҳои ҷорӣ ҳамчун вариант пешниҳод карда шуданд. Масалан, ҳангоми интихоби хидмати фолбинӣ (Tarot ё қаҳва) ҳамчун варианти иловагӣ шумо метавонед хусусиятҳои чакра ё аураро фармоиш диҳед (бо арзиши худ барои ҳар як). Инро чӣ гуна метавон амалӣ кард, то ба синфҳои хидматрасонии мавҷуда, ки ҳама чиз аллакай дуруст танзим ва ҳисоб карда шудааст, тағирот ворид накунад. Шумо метавонед дарсҳои иловагии Фол + Чакрас ё Фол + Аураро ба Фолбинии кунунӣ эҷод кунед:
public class Divination implements Service {
    // Здесь своя стоимость и другие методы
}
public class DivinationWithChakras implements Service {
    // Здесь своя стоимость и другие методы
}
public class DivinationWithAura implements Service {
    // Здесь своя стоимость и другие методы
}
ё танҳо зергурӯҳро истифода баред, яъне. синфи волидайнро ба синфи кӯдак васеъ кунед
public class DivinationWithAura extends Divination {
    public DivinationWithAura(String label, double price) {
        super(label, price);
    }
    // Здесь своя стоимость и другие методы
}
public class DivinationWithChakras extends Divination {
    public DivinationWithChakras(String label, double price) {
        super(label, price);
    }
    // Здесь своя стоимость и другие методы
}
Аммо камбудиҳо фавран намоён мешаванд, ки рӯҳияи тамоми ҷаҳонро инкишоф медиҳанд, мо метавонем имконоти нави иловагӣ дошта бошем, ки маънои синфҳои навро дорад ва агар ба мо ҳанӯз ҳам лозим аст, ки синфҳои ҳозираро муттаҳид кунем, он гоҳ синфҳо зуд афзоиш меёбанд, ҳадди аққал мо дигар надорем. кифоя аз синфи фолбинӣ бо ду вариант дар якҷоягӣ, на дар алоҳидагӣ:
public class DivinationWithChakrasAndAura implements Service {
    // Здесь своя стоимость и другие методы
}
Дар ин ҷо шумо метавонед намунаи хеле "сарфакунандаи" Decorator дар Java истифода баред. Барои ин, мо синферо барои имконоти иловагӣ эҷод мекунем, ки он хидматро иҷро мекунад, аммо хидматро низ дар бар мегирад. Ва мувофиқан, вақте ки мо бояд барои фолбинӣ фармоиш диҳем ва ҳатто бо ду вариант якҷоя, он чунин хоҳад буд: Интерфейс ҳамон тавре аст, ки аз аввал буд
public interface Service {
    public double getPrice();
    public String getLabel();
}
2 синфи хизматрасонӣ, ҳамон тавре ки қаблан буд:
public class Divination implements Service {
    private String label;
    private double price;

    public Divination(String label, double price) {
        this.label = label;
        this.price = price;
    }

    public double getPrice() {
        return this.price;
    }

    public String getLabel() {
        return this.label;
    }
}
public class Horoscope implements Service {
    private String label;
    private double price;

    public Horoscope(String label, double price) {
        this.label = label;
        this.price = price;
    }

    public double getPrice() {
        return this.price;
    }

    public String getLabel() {
        return this.label;
    }
}
Ороишгар барои имконоти иловагӣ
public class OptionDecorator implements Service {
    private Service service;
    private String label;
    private double price;

    public OptionDecorator(Service service, String label, double price) {
        this.service = service;
        this.label = label;
        this.price = price;
    }

    public double getPrice() {
        return this.price + service.getPrice();
    }

    public String getLabel() {
        return this.label + service.getLabel();
    }
}
Ва худи вариантҳо (то ҳол 2):
public class Aura extends OptionDecorator {
    public Aura(Service service) {
        super(service, "Характеристика ауры", 1500);
    }
}
public class Chakra extends OptionDecorator {
    public Chakra(Service service) {
        super(service, "Характеристика чакр", 500);
    }
}
Хуб, худи фармоиш
public static void main(String[] args) {
    // Гадание на Таро
    Service taro = new Divination("Таро", 1000);
    Service chakra = new Chakra(taro);
    Service aura = new Aura(chakra);

    // И общая стоимость
    System.out.println(aura.getPrice());
}
3000.0
ки натичаи маблаги хизмати асосй ва 2 варианти иловагй медихад. Ин маънои онро дорад, ки ба ҳар як иловагӣ лозим нест хосият (ё омезиши ҳарду) барои сохтани синфи нав. Илова бар ин, ин вариантҳоро на танҳо ба хидмати Fortune, балки ба хидмати Гороскоп низ татбиқ кардан мумкин аст. Аз ин рӯ, вақте ки дар ояндаи наздик мо бояд имконоти иловагии зеринро амалӣ кунем: - мутобиқати шарикони аватарӣ дар шабакаҳои иҷтимоӣ - беҳтар кардани гардиши пули нақд тавассути канали фосилавӣ, мо бояд танҳо 2 синфи иловагӣ нависем:
public class Channeling extends OptionDecorator {
    public Channeling(Service service) {
        super(service, "Полет в Поле Чудес", 99999);
    }
}
public class Avatar extends OptionDecorator {
    public Avatar(Service service) {
        super(service, "Ваша любовь в соц сетях", 5555);
    }
}
ва шумо метавонед онҳоро ба ҳама гуна хидмат илова кунед:
public static void main(String[] args) {
    // Гадание на Таро
    Service taro = new Divination("Таро", 1000);
    Service chakra = new Chakra(taro);
    Service aura = new Aura(chakra);

    // И общая стоимость
    System.out.println(aura.getPrice());

    // Гороскоп
    Service horoscope = new Horoscope("Персональный гороскоп", 1000);
    Service channenling = new Channeling(horoscope);
    Service avatar = new Avatar(channenling);

    // И общая стоимость
    System.out.println(avatar.getPrice());
}
ва натиҷаи барнома (ки ба мо лозим аст):
3000.0
106554.0
Шарҳҳо
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION