java - 不使用方法参数的接口(interface)实现

标签 java design-patterns

我只有一个界面

public interface ItemFilter{
   public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List)
}

有三种实现方式。

public Class Filter1 implements ItemFilter {
    public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) { 
         // Some logic like 
         if (obj1List != null) { 
             return items;
         }
    }
} 

 public Class Filter2 implements ItemFilter {
    public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) {              
         // Some logic like 
         if (obj2List != null) { 
             return items;
         }
} 

 public Class Filter3 implements ItemFilter {
    public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) { 
         // Some logic like 
         if (obj1List.size() !=0 && obj2List.size() !=0 ) { 
             return items;
         }
    }
} 

Filter1正在使用 obj1List过滤itemsFilter2正在使用 obj2List过滤itemsFilter3正在使用 obj1Listobj2List过滤items

我想要一个filterChain这将迭代循环中的所有过滤器。

 public Class FilterChain implements ItemFilter {
        // Injected the Filter1, Filter2, Filter3 from guice multibinder
        @Inject
        private Set<ItemFilter> itemFilters;

    public List<Item> filter (List<Item> items, List<Obj1> obj1List, List<Obj2> obj2List) { 
         List<Item> resultItems = items; 
         for(ItemFilter itemFilter : itemFilters) {
             resultItems = itemFilter.filter(resultItems, obj1List, obj2List);
         }
        return resultItems;
    }
}

这里类(class)Filter1过滤器方法实现将具有额外的 obj2List作为变量。接口(interface)声明中可以有一个实现中未使用的变量吗?

主要思想是,拥有不同的过滤器可以轻松解耦不同类中的过滤逻辑。不同的过滤器使用不同的参数来过滤 List<Item> .

最佳答案

是的,某些方法实现忽略某些方法参数是绝对可以的。

当然,在这种情况下你应该考虑所有参数的作用,也许你的代码可以重构以使用更少的参数。但是,如果您没有看到良好的重构,请继续使用部分忽略的参数。

关于java - 不使用方法参数的接口(interface)实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47780614/

相关文章:

ios - cocos2d中是否建议不要导入父类或兄弟类的头文件?

java - instanceof 与 isAnX()

java - 为现有文件的文件名添加索引 (file.txt => file_1.txt)

c# - 不同类的大量命令行参数

c# - 强制接口(interface)实现在 C# 中实现层次结构

java - Android:对另一个类中的 Activity 对象的引用变为 NULL

java - Autowiring 存储库为空

java - Android ServerSocketChannel 绑定(bind)回环地址

java - 动态图像 slider Android

java - 如何动态地将谓词添加到列表中