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 模式。这是解决此类问题的最佳模式,您已经非常接近该模式了。