Я использую шаблон наблюдателя для написания простой программы группового чата.
Группа 1: А, В и С Группа 2: А и С
A - отправитель / субъект с двумя списками, один для группы 1 и один для группы 2.
Является ли наличие двух списков в предметном классе хорошим способом сделать это?
Является ли это нарушением функции шаблона наблюдателя?
Отправитель может иметь две группы наблюдателей.
public class Sender {
private List<Receiver> group1 = new ArrayList<Receiver>();
private List<Receiver> group2 = new ArrayList<Receiver>();
private String msg;
private String name;
public Sender(String name) {
this.name = name;
}
public void sendMsg(int group, String msg, JTextArea display) {
this.msg = msg;
String output = name + ": " + msg;
display.append(output + "\n\r");
if(group == 1) {
notifyAllObservers(group1);
} else {
notifyAllObservers(group2);
}
}
public void register(int group, Receiver receiver) {
if(group == 1) {
group1.add(receiver);
} else {
group2.add(receiver);
}
}
public void notifyAllObservers(List<Receiver> group) {
for (Receiver receiver : group) {
receiver.update(msg);
}
}
public String toString() {
return name;
}
}
public class Receiver {
public Sender sender;
private JTextArea display;
public Receiver(int group, Sender sender, JTextArea display) {
this.sender = sender;
this.display = display;
this.sender.register(group, this);
}
public void update(String msg) {
display.append(sender.toString() + ": " + msg + "\n\r");
}
}