JavaRush /Java Blog /Random-TK /Java bezeg nagşy

Java bezeg nagşy

Toparda çap edildi
“Ilki bilen kelläň. Dizaýn nagyşlary ”Erik Freeman we Elizabet Robson muny şeýle kesgitleýär: Bezeg nagşy bir obýekte dinamiki taýdan täze mümkinçilikler berýär we işlemegi giňeltmek üçin kiçi klasslara alternatiwadyr. Mysal ulanyp, bu kesgitlemä has jikme-jik garamaga synanyşalyň. Başga bir döwrebap din döredip, adamlara degişli hyzmatlary bermegi meýilleşdirýärsiňiz öýdýän. Sebäbi häzirki zaman tendensiýalary wegetariançylygy, ekologiýany, adamyň ösüşini yzarlaýar we käbir sebäplere görä adamlar “adaty” dinlerden (ýa-da ahyrynda ateizmden) kanagatlanmaýarlar, şonuň üçin siz esasy akymdan ugur alyp, başga bir täze döwür dinini döredýärsiňiz (bar bolan sinteziň bir görnüşi) dinler, halanýan zatlaryny alyp). Ilki başda aşakdaky hyzmatlary hödürleýärsiňiz: 1. Bagtyýarlyk 2. Goroskop Ie. hemme zat şuňa meňzeýär: Elbetde bahasy bolan hyzmat interfeýsi bar :) we düşündiriş
public interface Service {
    public double getPrice();
    public String getLabel();
}
we hyzmatlar
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;
    }
}
Şeýlelik bilen, 2 sargyt peýda boldy (Tarot kartoçkalary we müşderiniň şahsy goroskopy bilen jadygöýlik):
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);
}
we programmanyň netijesi:
10000.0
Hemme zat gowy bolardy, ýöne eýýäm siziň ýaly ýüzlerçe, müňlerçe bolmasa-da, adamlaryň ruhy taýdan ösmegini dowam etdirmeli, ýogsam indi olar gyzyklanmaýar. Şonuň üçin häzirki hyzmatlara goşmaça wariantlar teklip edildi. Mysal üçin, jadygöýlik hyzmatyny (Tarot ýa-da kofe meýdançalary) saýlanyňyzda, goşmaça wariant hökmünde çakralaryň ýa-da auranyň aýratynlyklaryny sargyt edip bilersiňiz (hersiniň bahasy bilen). Hemme zat eýýäm düzülen we dogry hasaplanan bar bolan hyzmat synplaryna üýtgeşmeler girizmezlik üçin muny nädip durmuşa geçirip bolar? Häzirki Divine “Divination + Chakras” ýa-da “Divination + Aura” goşmaça synplar döredip bilersiňiz:
public class Divination implements Service {
    // Здесь своя стоимость и другие методы
}
public class DivinationWithChakras implements Service {
    // Здесь своя стоимость и другие методы
}
public class DivinationWithAura implements Service {
    // Здесь своя стоимость и другие методы
}
ýa-da diňe kiçi klasslary ulanyň, ýagny ene-atalar synpyny çaga synpyna çenli giňeltmek
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);
    }
    // Здесь своя стоимость и другие методы
}
Theöne kemçilikler derrew görünýär, bütin dünýäniň ruhy taýdan ösýär, täze synplary aňladýan täze goşmaça wariantlarymyz bolup biler we häzirki sapaklary birleşdirmeli bolsak, synplar çalt öser, iň bolmanda indi bolmaz Aýry-aýrylykda däl-de, iki wariant bilen “Divination” synpyna ýeterlikdir:
public class DivinationWithChakrasAndAura implements Service {
    // Здесь своя стоимость и другие методы
}
Java-da gaty “tygşytlaýjy” bezeg nagşyny ulanyp bilersiňiz. Munuň üçin Hyzmaty durmuşa geçirjek, şeýle hem Hyzmatlary öz içine alýan goşmaça wariantlar üçin synp dörederis. Şoňa görä-de, jadygöýlik üçin sargyt goýmaly bolanymyzda we hatda 2 wariant bilen bilelikde, şeýle bolar: Interfeýs ilkibaşdaky ýaly
public interface Service {
    public double getPrice();
    public String getLabel();
}
Hyzmatlaryň 2 synpy, öňki ýaly:
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;
    }
}
Goşmaça görnüşler üçin bezeg
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();
    }
}
Saýlawlaryň özi (şu wagta çenli 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);
    }
}
Buýrugyň özi
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
esasy hyzmatyň jemini we 2 goşmaça warianty berýär. Bu, her bir goşmaça zerurlygyň ýokdugyny aňladýar täze synp döretmek üçin opsiýa (ýa-da ikisiniň utgaşmasy). Mundan başga-da, bu wariantlar diňe bir “Fortune” habar beriş gullugyna däl, eýsem Goroskop hyzmatyna hem ulanylyp bilner. Şonuň üçin ýakyn wagtda aşakdaky goşmaça wariantlary durmuşa geçirmeli bolarys: - awatar hyzmatdaşlaryň sosial ulgamlarda sazlaşyklylygy - uzakdan kanal arkaly pul akymyny gowulaşdyrmak üçin diňe 2 goşmaça synp ýazmaly bolarys:
public class Channeling extends OptionDecorator {
    public Channeling(Service service) {
        super(service, "Полет в Поле Чудес", 99999);
    }
}
public class Avatar extends OptionDecorator {
    public Avatar(Service service) {
        super(service, "Ваша любовь в соц сетях", 5555);
    }
}
we olary islendik hyzmata goşup bilersiňiz:
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());
}
we programmanyň netijesi (bize gerek):
3000.0
106554.0
Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION