过滤器模式

过滤器模式:
	用于过滤筛选
1.定义常规类
2.定义抽象接口类,用于过滤的函数接收List,并返回List
3.定义具体过滤类实现抽象接口,重写过滤用的函数
4.定义用于操作的具体过滤类实现抽象接口,add,or,not
5.客户端使用抽象接口类,进行具体的过滤操作

1.定义常规类
	class Dog{
		private String born;
		public String getSexual() {
			return sexual;
		}
		private String sexual;
		public String getBorn() {
			return born;
		}
		public Dog(String born, String sexual) {
			this.born = born;
			this.sexual = sexual;
		}
	}
	
2.定义抽象接口类,用于过滤的函数接收List,并返回List
	public interface Selected {
		public abstract List<Dog> selectDogs(List<Dog> list);
	}
	
3.定义具体过滤类实现抽象接口,重写过滤用的函数
	class SelectedFemale implements Selected{
		@Override
		public List<Dog> selectDogs(List<Dog> dogs) {
			List<Dog>list = new ArrayList<Dog>();
			for(Dog dog: dogs) {
				if(dog.getSexual().equalsIgnoreCase("Female")) {
					list.add(dog);
				}
			}
			return list;
		}
	}
	class SelectedWild implements Selected{
		@Override
		public List<Dog> selectDogs(List<Dog> dogs) {
			List<Dog>list = new ArrayList<Dog>();
			for(Dog dog: dogs) {
				if(dog.getBorn().equalsIgnoreCase("Wild"))
					list.add(dog);
			}
			return list;
		}
	}	

4.定义用于操作的具体过滤类实现抽象接口,add,or,not
	class AndSelcted implements Selected{
		private Selected firstSelect;
		private Selected secondSelect;
		public AndSelcted(Selected first,Selected second) {
			firstSelect = first;
			secondSelect = second;
		}
		@Override
		public List<Dog> selectDogs(List<Dog> dogs) {
			List<Dog> list = firstSelect.selectDogs(dogs);
			return secondSelect.selectDogs(list);
		}
	}
	
	class ORSelcted implements Selected{
		private Selected firstSelect;
		private Selected secondSelect;
		public ORSelcted(Selected first,Selected second) {
			firstSelect = first;
			secondSelect = second;
		}
		@Override
		public List<Dog> selectDogs(List<Dog> dogs) {
			List<Dog> list = firstSelect.selectDogs(dogs);
			List<Dog> list2 = secondSelect.selectDogs(dogs);
			for(Dog dog:list2) {
				if(list.contains(dog) == false) {
					list.add(dog);
				}
			}
			return list;
		}
	}
	class NotSelected implements Selected{
		private Selected firstSelect;
		public NotSelected(Selected first) {
			firstSelect = first;
		}
		@Override
		public List<Dog> selectDogs(List<Dog> dogs) {
			List<Dog>list = firstSelect.selectDogs(dogs);
			List<Dog>list2 = new ArrayList<Dog>();
			for(Dog dog: dogs) {
				if(list.contains(dog) == false)
					list2.add(dog);
			}
			return list2;
		}
	}
	
5.客户端使用抽象接口类,进行具体的过滤操作
	public static void main(String[] args) {
			Dog[] arrayDogs = new Dog[] {new Dog("Wild", "Male")
			,new Dog("Dometicate", "FeMale")
			,new Dog("Dometicate", "feMale")
			,new Dog("Dometicate", "Male")
			,new Dog("Wild", "feMale")
			,new Dog("Dometicate", "feMale")
			,new Dog("Dometicate", "Male")
			,new Dog("Wild", "feMale")};
			List<Dog> dogs = Arrays.asList(arrayDogs);
			Selected selected = new AndSelcted(new SelectedFemale()
				, new SelectedWild());	
			prinList(selected.selectDogs(dogs));
		
			selected = new NotSelected(new SelectedFemale());
			prinList(selected.selectDogs(dogs));
		}
		
	public static void prinList(List<Dog> list) {
		for(Dog dog: list) {
			System.out.println("dog 's born : "+dog.getBorn()
				+"  dog 's sexual: "+dog.getSexual());
		}
	}		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值