К чему это я? Продолжаем нашу сагу о том, как не изобретать велосипед.
Бары это все хорошо, но далеко. Пусть есть классы кнопочек для графического интерфейса. Для каждой ОС они свои но я хочу получать кнопочку под текущую ОС и не напрягать себя лишними проверками. Что я делаю - создаю отдельный класс, который будет мне выдавать нужную мне кнопочку. Так.. пожалуй достаточно, надо ближе к коду.
Абстрактная кухня
public interface AbstractCook {
Dish getDish();
Drink getDrink();
}Мексиканская кухня
public class MexicoCook imlements AbstractCook {
@Override
public Dish getDish(){
return new Burrito();
}
@Override
public Drink getDrink(){{
return new Tequila();
}
}А вот немецкая
public class GermanCook imlements AbstractCook {
@Override
public Dish getDish(){
return new Meat();
}
@Override
public Drink getDrink(){{
return new Bear();
}
}разница, думаю, заметна)
а теперь об использовании счастья
class User {
eatSomething(AbstractCook cook){
cook.getDish();
}
}
В этом участке кода пользователь не знает что он съел, а значит можно писать программу для всех возможных вариантов пищеупотребления.
Переходим на новый уровень абстракции вместе!