策略模式
写代码时总会出很多的if…else,或者case。如果在一个条件语句中又包含了多个条件语句就会使得代码变得臃肿,维护的成本也会加大,而策略模式就能较好的解决这个问题。
需求:判断如果身高,年龄,体重
接口:
public interface Judge {
public Boolean judge(Person p);
}
实现类:
public class HeightJudge implements Judge {
@Override
public Boolean judge(Person p) {
if(p.getHeight()>180){
return true;
}
return false;
}
}
public class AgeJudge implements Judge {
@Override
public Boolean judge(Person p) {
if(p.getAge()<30){
return true;
}
return false;
}
}
public class WeightJudge implements Judge {
@Override
public Boolean judge(Person p) {
if(p.getWeight()<150){
return true;
}
return false;
}
}
与方法工具类:
public static Boolean WithMethod(List<Judge> list,Person p){
boolean flag = true;
for(Judge j:list){
if(flag){
flag=new Context(j).judge(p);
}else{
break;
}
}
return flag;
}
环境类:
public class Context {
Judge j = null;
public Context(Judge judge) {
this.j = judge;
}
public Boolean judge(Person p){
return this.j.judge(p);
}
public static void main(String[] args) {
/*Person p = new Person();
if(p.getAge()<30&&p.getHeight()>180&&p.getWeight()<140){
System.out.println("完美男神,偷偷抱回家");
}else{
System.out.println("pass....");
}*/
Person p = new Person();
p.setAge(30);
p.setHeight(181);
p.setWeight(130);
List<Judge> list = new ArrayList<Judge>();
list.add(new AgeJudge());
list.add(new HeightJudge());
list.add(new WeightJudge());
if(JudgeUtil.WithMethod(list, p)){
System.out.println("完美男神,偷偷抱回家");
}else{
System.out.println("pass....");
}
}
}