Java 正在分发事件给 类
Java Distributing event to classes
我正在开发一个 android 发票管理应用程序。每张发票都链接到一个客户。如果发票过期,则会生成通知。
现在我想要的是当客户被删除时我想删除所有 his/her 发票、付款和通知。
为此,我创建了一个类似 drupal 的钩子模式(因为我以前是一名 drupal 开发人员)。下面的代码说明了这个模式是如何工作的。
如何调用钩子:
public void callClientDeletedHooks(ClientNew client) {
final ArrayList<Object> frArr = HookClasses.getClasses();
if (frArr != null && !frArr.isEmpty()) {
for (Object frg : frArr) {
try {
if (frg instanceof Hooks.ClientDeletedHook) {
Hooks.ClientDeletedHook hooks = (Hooks.ClientDeletedHook) frg;
hooks.clientDeleted(client, getActivity());
}
} catch (NoSuchMethodError e) {
e.printStackTrace();
}
}
}
}
callClientDeletedHooks 在客户端被删除后立即调用,获取被删除客户端的对象。最后这个对象被分发给每个实现该钩子的class。
挂钩接口:
public interface Hooks {
public interface ClientDeletedHook {
public void clientDeleted(ClientNew client_new, Context ctx);
}
// Place for other hooks
}
我如何注册实现挂钩的 classed
public class HookClasses {
public static ArrayList<Object> getClasses() {
ArrayList<Object> fArr = new ArrayList<Object>();
fArr.add(new NotificationListFragment());
fArr.add(new BaseInvoicesListFragment());
fArr.add(new ReturnListFragment());
fArr.add(new PaymentListFragment());
return fArr;
}
}
我是如何实现 class 中的钩子的。一个例子。
public class NotificationListFragment extends BaseFragment implements
Hooks.ClientDeletedHook {
// This hook is called when client deleted
@Override
public void clientDeleted(ClientNew client_new, Context ctx) {
NotificationUtil _iu = NotificationUtil.getInstance(ctx);
try {
// Here I am deleting all notification for a client
_iu.delete_row_from_table("notification", "client_id", ""
+ client_new.getClient_id());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
现在我的问题是,将客户端被删除之类的事件分发给许多 classes 是正确的方法吗?
我不知道 drupal 模式,但对于此类问题,您可以使用 Java 中的 Observer 模式。这是解决此类问题的最佳模式,您已经非常接近该模式了。
我正在开发一个 android 发票管理应用程序。每张发票都链接到一个客户。如果发票过期,则会生成通知。
现在我想要的是当客户被删除时我想删除所有 his/her 发票、付款和通知。
为此,我创建了一个类似 drupal 的钩子模式(因为我以前是一名 drupal 开发人员)。下面的代码说明了这个模式是如何工作的。
如何调用钩子:
public void callClientDeletedHooks(ClientNew client) {
final ArrayList<Object> frArr = HookClasses.getClasses();
if (frArr != null && !frArr.isEmpty()) {
for (Object frg : frArr) {
try {
if (frg instanceof Hooks.ClientDeletedHook) {
Hooks.ClientDeletedHook hooks = (Hooks.ClientDeletedHook) frg;
hooks.clientDeleted(client, getActivity());
}
} catch (NoSuchMethodError e) {
e.printStackTrace();
}
}
}
}
callClientDeletedHooks 在客户端被删除后立即调用,获取被删除客户端的对象。最后这个对象被分发给每个实现该钩子的class。
挂钩接口:
public interface Hooks {
public interface ClientDeletedHook {
public void clientDeleted(ClientNew client_new, Context ctx);
}
// Place for other hooks
}
我如何注册实现挂钩的 classed
public class HookClasses {
public static ArrayList<Object> getClasses() {
ArrayList<Object> fArr = new ArrayList<Object>();
fArr.add(new NotificationListFragment());
fArr.add(new BaseInvoicesListFragment());
fArr.add(new ReturnListFragment());
fArr.add(new PaymentListFragment());
return fArr;
}
}
我是如何实现 class 中的钩子的。一个例子。
public class NotificationListFragment extends BaseFragment implements
Hooks.ClientDeletedHook {
// This hook is called when client deleted
@Override
public void clientDeleted(ClientNew client_new, Context ctx) {
NotificationUtil _iu = NotificationUtil.getInstance(ctx);
try {
// Here I am deleting all notification for a client
_iu.delete_row_from_table("notification", "client_id", ""
+ client_new.getClient_id());
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
现在我的问题是,将客户端被删除之类的事件分发给许多 classes 是正确的方法吗?
我不知道 drupal 模式,但对于此类问题,您可以使用 Java 中的 Observer 模式。这是解决此类问题的最佳模式,您已经非常接近该模式了。