Java Observer模式查找发件人?
作者:互联网
observer.update();
上面的方法使观察者的可见性“GONE”,但我想改变除发送者观察者之外的所有其他观察者.我怎么能控制这个?
我的所有动作都是观察者,并在下面的构造函数中注册自己,
public class ParentAction extends AbstractAction implements IActionObserver{
private ArrayList<IAction> lSubItems;
private View subView;
public ParentAction( String ItemText,int drawable,ArrayList<IAction> SubItems) {
super(ItemText,drawable);
lSubItems = SubItems;
ActionHolder.getInstance().registerObserver(this);
}
@Override
public void update() {
getSubView().setVisibility(View.GONE);
} ...
ActionHolder
public class ActionHolder implements IActionSubject {
private static ActionHolder uniqueActionHolder;
private ArrayList observers;
private ActionHolder() {
observers = new ArrayList();
}
public static synchronized ActionHolder getInstance() {
if (uniqueActionHolder == null) {
uniqueActionHolder = new ActionHolder();
}
return uniqueActionHolder;
}
public void registerObserver(IActionObserver o) {
observers.add(o);
}
public void removeObserver(IActionObserver o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
public void notifyObserver() {
for (int i = 0; i < observers.size(); i++) {
IActionObserver observer = (IActionObserver) observers.get(i);
observer.update();
}
}
public void actionClicked(View view) {
notifyObserver();
}
}
解决方法:
这是你自己的观察者模式的实现吗?如果是这样,您可以修改notify方法,例如:
public void notifyObserver(IAction sender) {
for (int i = 0; i < observers.size(); i++) {
IActionObserver observer = (IActionObserver) observers.get(i);
if (observer != sender)
observer.update();
}
}
并称之为
ActionHolder.getInstance().notifyObserver(this);
或者,您可以在动作类中添加标志:
private bool sender = false;
在通知之前设置标志:
sender = true;
ActionHolder.getInstance().notifyObserver();
并在更新中使用此标志:
@Override
public void update() {
if (!sender) {
getSubView().setVisibility(View.GONE);
}
sender = false;
}
标签:java,design-patterns,observer-pattern 来源: https://codeday.me/bug/20190625/1284373.html