PHP
- 1 ответ
- 0 вопросов
1
Вклад в тег
abstract class IMobile {
void prepare() {
System.out.println("Подготовим документы по продаже от ООО Билайн");
}
void setInternetTariff() {
System.out.println("Установим стандартный тариф Билайна для интернета");
}
void box() {
System.out.println("Упакуем в желтый пакетик");
}
}
class BeelineSamsung extends IMobile {
void setInternetTariff() {
System.out.println("Установим отдельный тариф для 5G интернета");
}
}
class BeelineIPhone extends IMobile {}
class BeelineStore {
public IMobile orderPhone(String type) {
IMobile phone = null;
if (type.equals("samsung")) {
phone = new BeelineSamsung();
} else if (type.equals("iphone")) {
phone = new BeelineIPhone();
}
phone.prepare();
phone.setInternetTariff();
phone.box();
return phone;
}
}
// использование
// var mobileStore = new BeelineStore();
// mobileStore.orderPhone("samsung"); <- клиентский код
class MobileFactory {
public IMobile getMobile(String type) {
if (type.equals("samsung")) {
return new BeelineSamsung();
} else if (type.equals("iphone")) {
return new BeelineIPhone();
}
return null;
}
}
class BeelineStore {
MobileFactory factory;
public BeelineStore(MobileFactory factory) {
this.factory = factory;
}
public IMobile orderPhone(String type) {
IMobile phone;
phone = factory.getMobile(type);
phone.prepare();
phone.setInternetTariff();
phone.box();
return phone;
}
}
// использование
// var mobileFactory = new MobileFactory();
// mobileStore = new BeelineStore(mobileFactory);
// mobileStore.orderPhone("samsung"); <- замечу, клиентский код не изменился
abstract class BeelineStore { // класс становится абстрактным
protected abstract IMobile getMobile(String type); // возвращается метод getMobile
public IMobile orderPhone(String type) {
IMobile phone = getMobile(type);
phone.prepare();
phone.setInternetTariff();
phone.box();
return phone;
}
}
class CenterBeelineSamsung extends IMobile {
void setInternetTariff() {
System.out.println("Отдельный тариф для 5G интернета в центре России");
}
}
class CenterBeelineIPhone extends IMobile {}
class СenterBeelineStore extends BeelineStore {
public IMobile getMobile(String type) {
if (type.equals("samsung")) {
return new CenterBeelineSamsung();
} else if (type.equals("iphone")) {
return new CenterBeelineIPhone();
}
return null;
}
public void tradeIn(String phone) {
System.out.println("Вы обменяли старый телефон на новый с доплатой");
}
}
class UralBeelineSamsung extends IMobile {
void setInternetTariff() {
System.out.println("Отдельный тариф для 5G интернета на Урале");
}
}
class UralBeelineIPhone extends IMobile {
void setInternetTariff() {
System.out.println("Отдельный тариф для стандартного интернета на Урале");
}
}
class UralBeelineStore extends BeelineStore {
public IMobile getMobile(String type) {
if (type.equals("samsung")) {
return new UralBeelineSamsung();
} else if (type.equals("iphone")) {
return new UralBeelineIPhone();
}
return null;
}
}
// использование
// var centerBeelineStore = new СenterBeelineStore();
// centerBeelineStore.orderPhone("samsung");
// var uralBeelineStore = new UralBeelineStore();
// uralBeelineStore.orderPhone("samsung");