С сегодняшнего дня я хочу больше узнать о том, как проектируется/структурируется приложение. Итак, я прочитал кое-что о шаблоне фасада и получил небольшой вопрос об этом шаблоне. Прежде всего, краткое введение в мой проект:
Мой проект Мой проект – мультимедийное приложение. С одной стороны находится MultimediaApplication, у которого есть разные представления (например, Musicscreen, Videoscreen...), а с другой стороны есть мой IRController, который позволяет вам управлять приложением. Приложение MultimediaApplication работает без IRController, потому что оно слушает KeyEvents (например, нажато «ввод»). IRController похож на небольшую собственную систему: IRController
Это перечисление создает ключевой объект, если на ircontroller нажата клавиша.
public enum
/*
Example Values
*/
VOL_UP(new MediaVolumeUpKey()),
VOL_DOWN(new MediaVolumeDownKey()),
MUTE(new MediaMuteKey());
private byte bytes[];// Repräsentiert den Key
private Key k;
private Keys(Key key){
this.k = key;
}
public static Key getKey(byte[] bytes){
for(Keys key: values()){
if(Arrays.equals(key.getBytes(), bytes)){
return key.k;
}
}
return null;
}
public byte[] getBytes(){
return this.bytes;
}
public Key getKey(){
return this.k;
}
}
И это абстрактный класс Key. Все ключи означают ключ.
public abstract class Key {
private byte[] bytes;
protected Key(int...bytes){//int... als argumente für übersichtlichen Code
byte[] temp = new byte[bytes.length];
for(int i =0; i<bytes.length;i++) temp[i] = bytes[i];
this.bytes = temp;
}
public byte[] getBytes(){return bytes;}
public void abstract call();
}
public static Key getKey(byte[] bytes){
for(Keys key: values()){
if(Arrays.equals(key.getBytes(), bytes)){
return key.k;
}
}
return null;
}
public byte[] getBytes(){
return this.bytes;
}
public Key getKey(){
return this.k;
}
Теперь, когда я меняю свой IRController, мне просто нужно изменить байт-код для ключа.
Проблема заключается в знании связи между ключевыми классами и мультимедийным приложением. Поскольку все слабо связано, я подумал, что может быть хорошей идеей построить фасад вокруг мультимедийного приложения. Таким образом, ключевой класс может вызывать play() stop() pause() volUp() фасада, и фасад решает, как действовать при вызове метода.
Могу ли я реализовать свою идею таким образом? Или мне лучше спросить, правильно ли я понял шаблон фасада? Спасибо за вашу помощь :)