JavaRush /جاوا بلاگ /Random-SD /جاوا سجاڳي جو نمونو

جاوا سجاڳي جو نمونو

گروپ ۾ شايع ٿيل
ڪتاب ۾ ”سر پهريون. ايريڪ فريمين ۽ ايلزبيٿ رابسن پاران ڊيزائن جا نمونا ان کي هن ريت بيان ڪري ٿو: ڊيڪرائيٽر جو نمونو متحرڪ طور تي هڪ اعتراض کي نئين صلاحيتون مهيا ڪري ٿو ۽ ڪارڪردگي کي وڌائڻ لاءِ ذيلي ڪلاسنگ جو متبادل آهي. اچو ته هڪ مثال استعمال ڪندي هن تعريف کي وڌيڪ تفصيل سان ڏسڻ جي ڪوشش ڪريون. فرض ڪريو ته توهان هڪ ٻيو جديد مذهب ٺاهيو آهي ۽ ماڻهن کي ان سان لاڳاپيل خدمتون مهيا ڪرڻ جو منصوبو ٺاهيو آهي. ڇاڪاڻ ته جديد رجحانات سبزياتيات، ماحوليات، انساني ترقي جي پيروي ڪندا آهن، ۽ ڪجهه سببن جي ڪري ماڻهو "روايتي" مذهبن (يا آخر ۾ الحاد) کان مطمئن نه آهن، ته پوء توهان، مکيه وهڪرو جي پيروي ڪندي، هڪ ٻيو نئون دور مذهب ٺاهيو (موجوده کان هڪ قسم جي ترکیب. مذهب، هر هڪ کان وٺي ڇا پسند ڪيو). شروعات ۾ توھان ھيٺ ڏنل خدمتون مهيا ڪندا آھيو: 1. قسمت ٻڌائڻ 2. Horoscope يعني. هر شي هن وانگر ڏسڻ ۾ اچي ٿي: اتي هڪ خدمت انٽرفيس آهي قيمت جي قيمت سان :) ۽ هڪ وضاحت
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 آرڊر ظاهر ٿيا (تارو ڪارڊ سان خوش قسمتي ۽ ڪلائنٽ کان هڪ ذاتي افقون):
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
سڀ ڪجھ ٺيڪ ٿي ويندو، پر اتي اڳ ۾ ئي سوين آھن، جيڪڏھن نه ھزارين، توھان وانگر، ۽ اسان کي ماڻھن جي روحانيت کي ترقي ڪرڻ جاري رکڻ جي ضرورت آھي، ٻي صورت ۾ انھن کي وڌيڪ دلچسپي نه آھي. تنهن ڪري، موجوده خدمتن لاء اضافي اختيارن کي هڪ اختيار جي طور تي پيش ڪيو ويو. مثال طور، جڏهن قسمت ٻڌائڻ جي خدمت (ٽارٽ يا ڪافي گرائونڊ) چونڊيو، هڪ اضافي اختيار جي طور تي، توهان چڪر يا آورا جي خاصيتن کي ترتيب ڏئي سگهو ٿا (هر هڪ لاء انهن جي پنهنجي قيمت سان). اهو ڪيئن لاڳو ٿي سگهي ٿو ته جيئن موجوده سروس ڪلاس ۾ تبديليون نه ڪيون وڃن، جتي هر شيءِ اڳ ۾ ئي ترتيب ڏنل آهي ۽ صحيح حساب سان. توهان اضافي ڪلاس ٺاهي سگهو ٿا Divination + Chakras or Divination + Aura موجوده Divination ڏانهن:
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);
    }
    // Здесь своя стоимость и другие методы
}
پر نقصانات فوري طور تي ظاهر ٿيندا آهن، سڄي دنيا جي روحانيت کي ترقي ڪندي، اسان وٽ شايد نوان اضافي اختيارات موجود آهن، جنهن جو مطلب آهي نوان طبقن، ۽ جيڪڏهن اسان کي اڃا تائين موجوده طبقن کي گڏ ڪرڻ جي ضرورت آهي، ته پوء طبقن تيزي سان وڌندا، گهٽ ۾ گهٽ اسان کي وڌيڪ نه آهي. ٻن اختيارن سان گڏ Divination ڪلاس جي ڪافي آھي، ۽ الڳ الڳ الڳ نه آھي:
public class DivinationWithChakrasAndAura implements Service {
    // Здесь своя стоимость и другие методы
}
هي اهو آهي جتي توهان استعمال ڪري سگهو ٿا تمام گهڻو "بچائي" سجاڳي وارو نمونو جاوا ۾. هن کي ڪرڻ لاءِ، اسان اضافي اختيارن لاءِ هڪ ڪلاس ٺاهينداسين، جنهن ۾ سروس به لاڳو ٿيندي، پر سروس به شامل هوندي. ۽ ان جي مطابق، جڏهن اسان کي قسمت ٻڌائڻ لاء هڪ آرڊر ڏيڻ جي ضرورت آهي ۽ 2 اختيارن سان گڏ، اهو هن طرح نظر ايندو: انٽرفيس اهو آهي جيئن اهو شروع کان هو.
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 اضافي اختيارن جو نتيجو ڏئي ٿو. ان جو مطلب اهو آهي ته هر اضافي جي ضرورت ناهي اختيار (يا ٻنهي جو ميلاپ) هڪ نئون ڪلاس ٺاهڻ لاءِ. ان کان سواء، اهي اختيار لاڳو ڪري سگھجن ٿيون نه رڳو خوشخبري ٻڌائڻ جي خدمت تي، پر پڻ Horoscope سروس تي. تنهن ڪري، جڏهن ويجهي مستقبل ۾ اسان کي هيٺين اضافي اختيارن کي لاڳو ڪرڻ جي ضرورت آهي: - سماجي نيٽ ورڪن تي اوتار ڀائيوارن جي مطابقت - ريموٽ چينلنگ ذريعي نقد جي وهڪري کي بهتر ڪرڻ، اسان کي صرف 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