class ListenerModelHandler implements
        ListenerAssist {

    @NonNull T removeOrCreate(@NonNull DownloadTask task, @Nullable BreakpointInfo info) {
        final int id = task.getId();
        T model;
        synchronized (this) {
            if (singleTaskModel != null && singleTaskModel.getId() == id) {
                model = singleTaskModel;
                singleTaskModel = null;
            } else {
                model = modelList.get(id);
                modelList.remove(id);
            }
        }

        if (model == null) {
            model = creator.create(id);

            if (info != null) {
                model.onInfoValid(info);
            }
        }

        return model;
    }

      ListenerModelHandler(ModelCreator<T> creator);

}