/**
* 设计模式(8)
* 过滤器模式
*
* 这个模式无非就是把一个实现类,增加一个(或多个)漏斗类实现过滤某些条件而已
*
* 该模式的原理是将对象使用常规过滤手段进行重新组合
* 与建造模式有相似点,但不同的是该模式更善于用在多个相同对象的时候
*
*/
//
// 仍然使用宠物商店的例子
//
// 宠物狗的实现类
//
class Dog {
private String gender;
private int price;
public Dog(String gender,int price) {
this.gender = gender;
this.price = price;
}
public int getPrice() {
return price;
}
public String getGender() {
return gender;
}
}
//
// 过滤类重组接口与实现类
//
interface DogFilter {
List<Dog> run(List<Dog> dogs);
}
// 从一组狗中过滤出便宜的 < 100 并放入List中返回
class CheapDog implements DogFilter {
@Override
public List<Dog> run(List<Dog> dogs) {
List<Dog> cheapDos = new ArrayList<>();
for(Dog dog : dogs) {
if(dog.getPrice() < 100)
cheapDos.add(dog);
}
return cheapDos;
}
}
// 从一组狗中获取出母狗 -. - 并放入List中返回
class BitchDog implements DogFilter {
@Override
public List<Dog> run(List<Dog> dogs) {
List<Dog> cheapDos = new ArrayList<>();
for(Dog dog : dogs) {
if(dog.getGender() == "female")
cheapDos.add(dog);
}
return cheapDos;
}
}
// 测试
// Test Filter Pattern
public class main {
public static void printDogs(List<Dog> dogs) {
for(Dog dog : dogs) {
System.out.printf("price=%d [%s]\n",dog.getPrice(),dog.getGender());
}
}
public static void main(String[] argv) {
// 先拿出四只狗测试一下
List<Dog> dogs = new ArrayList<>();
dogs.add(new Dog("female",120));
dogs.add(new Dog("female",80));
dogs.add(new Dog("male",200));
dogs.add(new Dog("male",60));
// 看看廉价狗有几只
printDogs( new CheapDog().run(dogs) );
/* 输出:
price=80 [female]
price=60 [male]
*/
// 看看母狗有几只
printDogs( new BitchDog().run(dogs) );
/* 输出:
price=120 [female]
price=80 [female]
*/
}
}
转载于:https://my.oschina.net/tasker/blog/813268