如何实现观察者模式的更新方法



我正在尝试根据我的代码调整观察者模式,所以在我的情况下MSG0100是我的 Subject 类更新变量 msg100PreselectionAplication,而 MainActivity 类它是一个具体的观察者,通常你必须创建观察者类,但我的问题是 MainActivity 必须从该类扩展,这是一个问题,因为 Java 不支持多重继承。这是我到目前为止所拥有的,有人可以告诉我接下来需要什么吗?请

MSG0100类:

public class MSG0100  implements PreselectionAplicationUseCases {
private OnMsg100PreselectionChanged listener = null;

public void setOnMsgPreselectionChanged(OnMsg100PreselectionChanged listener) {
this.listener = listener;
}
public void setMsg100PreselectionAplication(boolean msg100PreselectionAplication) {
if(listener != null) {
listener.onPreselectionChanged(msg100PreselectionAplication);
}
}
}
interface OnMsg100PreselectionChanged {
void onPreselectionChanged(boolean isChanged);
}

主要活动类:

public class MainActivity extends AppCompatActivity {
private ExpandableListViewAdapter mExpandableListViewAdapter;
PreselectionAplicationUseCases preselectionAplicationUseCases;
public void Preselection(){
preselectionApplicationUseCases.setOnMsgPreselectionChanged(new OnMsg100PreselectionChanged {
@Override
void onPreselectionChanged(boolean isChanged) {
//do something with changed boolean
}
});
}
}

你应该创建一个Observer作为接口,它由MainActivity实现,如下所示:

interface Observer {
void update(Data data)
}
public class MainActivity extends AppCompatActivity implements Observer {

//…
@Override
public void update(Data data) {
// update your data to your UI here
}
//…
}

并修改您的主题以接收观察者

interface Subject {
void registerObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers();
}
public class MSG0100  implements PreselectionAplicationUseCases, Subject {
private Data data = new Data();
private Observer o;
@Override
public void registerObserver(Observer o) {
this.o = o;
}
@Override
public void removeObserver(Observer o) {
o = null;
}
@Override
public void notifyObservers() {
o.update(data);
}

// ... other method that can update the data class
}

这是一个观察者模式,但在我看来,你只是想在活动上实现 OnMsg100PreselectionChanged ,如下所示:

public class MainActivity extends AppCompatActivity, OnMsg100PreselectionChanged {
void someMethod() {
MSG0100 msg0100 = new MSG0100();
msg0100.setOnMsgPreselectionChanged(this);
}
@Override
void onPreselectionChanged(boolean isChanged) {

}
}

最新更新