Телефон - документация по реализации Java < /p>
Эта программа Java моделирует мобильный телефон, используя шаблон проектирования состояния. Телефон может быть в разных состояниях в зависимости от взаимодействия с пользователями, и он соответственно отвечает на такие события, как нажатие кнопок или запуск приложений. Поведение телефона меняется в зависимости от его состояния, и переходы между состояниями обрабатываются посредством подклассов абстрактного класса состояния. < /P>
package sk.stuba.fei.uim.oop.phone;
import sk.stuba.fei.uim.oop.application.Application;
import java.util.HashSet;
import java.util.Set;
public class Phone {
private State state;
private Set installedApplications;
private Application runningApplication;
public Phone() {
this.installedApplications = new HashSet();
this.state = new Locked();
// Predinštalované aplikácie
install(new Application("Firefox"));
install(new Application("Spotify"));
install(new Application("Instagram"));
}
public void powerButtonPressed() {
this.state = state.onPowerButton(this);
}
public void backButtonPressed() {
this.state = state.onBackButton(this);
}
public void passwordEntered(String password) {
this.state = state.onPasswordEntered(this, password);
}
public void start(Application app) {
this.state = state.onStartApplication(this, app);
}
public void install(Application app) {
installedApplications.add(app);
}
public void uninstall(Application app) {
installedApplications.remove(app);
}
public String getStateName() {
return state.getName();
}
public Set getInstalledApplications() {
return installedApplications;
}
public Application getRunningApplication() {
return runningApplication;
}
public void setState(State state) {
this.state = state;
}
public void setRunningApplication(Application app) {
this.runningApplication = app;
}
}
abstract class State {
String getName() {
return getClass().getSimpleName().replace("State", "");
}
State onPowerButton(Phone phone) { return this; }
State onBackButton(Phone phone) { return this; }
State onPasswordEntered(Phone phone, String password) { return this; }
State onStartApplication(Phone phone, Application app) { return this; }
}
class Locked extends State {
@Override
State onPowerButton(Phone phone) {
return new Password();
}
}
class Password extends State {
@Override
State onPasswordEntered(Phone phone, String password) {
if ("123".equals(password)) {
return new Homescreen();
}
return new Locked();
}
}
class Homescreen extends State {
@Override
State onStartApplication(Phone phone, Application app) {
phone.setRunningApplication(app);
return new ApplicationRunning();
}
@Override
State onBackButton(Phone phone) {
return new Locked();
}
@Override
State onPowerButton(Phone phone) {
return new Locked();
}
}
class ApplicationRunning extends State {
@Override
State onBackButton(Phone phone) {
phone.setRunningApplication(null);
return new Homescreen();
}
@Override
State onPowerButton(Phone phone) {
phone.setRunningApplication(null);
return new Locked();
}
}
< /code>
Состояния телефона
Существует четыре возможных состояния: < /p>
Заблокировано
Первоначальное состояние телефона при включении.
только позволяет переходить к состоянию пароля, нажимая кнопку питания.
Password
Представляет экран, где пользователь может ввести пароль. Homestreen State. В противном случае он возвращается к заблокированному.
Homescreen
Основной пользовательский интерфейс телефона.
Пользователь может запустить приложения или заблокировать телефон из этого состояния.
Запуск приложения изменяет состояние для приложений. /> Переходы состояния
кнопка питания нажата
Locked → пароль
пароль → заблокирован
Homestreen → Locked
ApplicationRunning → Locked (закрытие приложения)
Пароль введен
password → homescre (если пароль «123»)
passwor /> Homescreen → ApplicationRunning
Back Blothing нажала
ApplicationRunning → Homestreen (закрытие приложения)
Homestreen → Locked < /p>
Подробнее здесь: https://stackoverflow.com/questions/796 ... act-metiod