Function 面向对象设计过滤鞋

Function 面向对象设计过滤鞋,function,Function,我不太熟悉OO设计实现。有一个面向对象的设计需求。假设我们有一套以鞋子为对象的鞋子。我需要创建一个函数,在用户输入一些过滤条件后返回一套鞋子,如尺寸、颜色、价格范围等。将来可能会扩展过滤条件。我如何在将来创建一个代码修改最少的好函数 过滤器通常使用模式实现。对于你的鞋子问题,解决办法可能是 /** * Empty default filter returns the original list. * Maybe this should be an Interface. */ publ

我不太熟悉OO设计实现。有一个面向对象的设计需求。假设我们有一套以鞋子为对象的鞋子。我需要创建一个函数,在用户输入一些过滤条件后返回一套鞋子,如尺寸、颜色、价格范围等。将来可能会扩展过滤条件。我如何在将来创建一个代码修改最少的好函数

过滤器通常使用模式实现。对于你的鞋子问题,解决办法可能是

/**
  * Empty default filter returns the original list.
  * Maybe this should be an Interface.
  */
public class ShoeFilter {


    List<Shoe> filter (List<Shoe> shoeList) {
       // default ist to do nothing.
       return shoeList; 
    }
}


public class SizeFilter extends ShoeFilter {
    private final ShoeFilter filter; // this can be also part of 
    private final int minSize; 
    private final int maxSize;

    public SizeFilter (ShoeFilter filter, int minSize, int maxSize) {
         this.filter = filter;
         this.minSize = minSize;
         this.maxSize = maxSize;
    }

    public List<Shoe> filter (List<Shoe> list) { 
      List<Shoe> filteredList = filter.filter(list); // apply original filter

      // filter by size
    }
}


public class ColorFilter extends ShoeFilter {
    private final ShoeFilter filter;
    private final Color color; 

    public ColorFilter (ShoeFilter filter, Color color) {
         this.filter = filter;
         this.color = color;
    }

    public List<Shoe> filter(List<Shoe> list) {
       List<Shoe> filteredList = filter.filter(list); // apply original filter

       // filter by color
    }
 }


 public static void main(String[] args) {
    List<Shoe> shoes = ...;
    ShoeFilter emptyFilter = new ShoeFilter(); // can be a singleton

    ShoeFilter filter = new SizeFilter(new ColorFilter(emptyFilter, Color.Black), 39, 41);

    List<Shoe> filteredList = filter(shoes);


 }
/**
*空的默认筛选器返回原始列表。
*也许这应该是一个接口。
*/
公共级鞋底过滤器{
列表过滤器(列表鞋店列表){
//默认情况下,他什么也不做。
回归鞋匠;
}
}
公共类SizeFilter扩展ShoeFilter{
private final ShoeFilter filter;//这也可以是
私人决赛;
私有最终整数最大值;
公共SizeFilter(ShoeFilter筛选器、int-minSize、int-maxSize){
this.filter=过滤器;
this.minSize=minSize;
this.maxSize=maxSize;
}
公共列表筛选器(列表){
List filteredList=filter.filter(List);//应用原始筛选器
//按大小筛选
}
}
公共类ColorFilter扩展ShoeFilter{
专用最终ShoeFilter过滤器;
私人最终颜色;
公共颜色过滤器(ShoeFilter过滤器,彩色){
this.filter=过滤器;
这个颜色=颜色;
}
公共列表过滤器(列表){
List filteredList=filter.filter(List);//应用原始筛选器
//按颜色过滤
}
}
公共静态void main(字符串[]args){
列出鞋子=。。。;
ShoeFilter emptyFilter=new ShoeFilter();//可以是单例
ShoeFilter filter=新的SizeFilter(新的颜色过滤器(清空过滤器,颜色为黑色),39,41);
列表过滤器列表=过滤器(鞋子);
}

要创建过滤链,您可以使用。

那么,您将鞋子存放在哪里?作为静态设置?@GermaineJason返回鞋的arraylist就足够了,就像arraylist一样。谢谢您的回答。我很清楚。所以每次如果我需要创建一个新的过滤器来设置鞋子,我只需要创建一个新的过滤器类来实现基本的过滤器类。