Как создать многопользовательский класс в абстрактном методеJAVA

Программисты JAVA общаются здесь
Anonymous
Как создать многопользовательский класс в абстрактном методе

Сообщение Anonymous »

Телефон - документация по реализации 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

Вернуться в «JAVA»