android 源码设计模式之--策略模式
1 概念定义
策略模式: 就是把同一个功能或算法等抽象为一个接口方法。具体的实现用单独的类实现这个接口。然后我们再根据实际情况选择不同的算法或者策略(不同的实现类)来完成该功能, 通俗来讲,找出应用中可能需要变动的地方,把它们独立出来,并封装起来,不要和那些不需要变化的代码混在一起 ,使代码更加有弹性和扩展性。
2应用场景
系统有某部分功能是经常需要增加匹配功能(用if...else..或是swtic..case)的,如果每次修改都是在上一次的代码位置中增加,如此很多此处代码非常臃肿,那么我们可以把这该部分功能抽象封装成一个接口,不同的功能用不能的类实现,要用什么功能直接用某个实现类,
3组成部分
1 策略接口
2 很多具体策略实现
4示例场景说明
出行工具的不同,如码农我上班的交通工具无非就是:走路,坐公交,坐滴滴巴士,骑小毛驴(电动车),骑自行车,如按传统的方式编码都是if...else..来选择交通工具,一但我哪天多了一个上班交通方式,就得再此基础上加一个else,多100个方式就是多100个else,且每次选择有可能要执行99次选择才能选中自己需要的
5示例:传统方式
public class ChuanTongMain { private static int mZiXingChe = 1; private static int mGongjiao = 2; private static int mDidiBashi = 3; private static int mDiandongChe = 4; public static void main(String[] args) { chuXingGongGu(mZiXingChe); } private static void chuXingGongGu(int fashi){ switch(fashi){ case 1: System.out.println("自行车"); break; case 2: System.out.println("公交"); break; case 3: System.out.println("滴滴巴士"); break; case 4: System.out.println("电动车"); break; } } }
用策略模式
//定义策略接口(抽象交通工具)
public interface JiaotongGongJu { public void xuanzeJiaoTong(); }
//具体各种交通方式的实现
public class DiandongChe implements JiaotongGongJu { @Override public void xuanzeJiaoTong() { // TODO Auto-generated method stub System.out.println("电动车"); } } public class DidiBashi implements JiaotongGongJu { @Override public void xuanzeJiaoTong() { // TODO Auto-generated method stub System.out.println("滴滴巴士"); } } public class GongjiaoChe implements JiaotongGongJu { @Override public void xuanzeJiaoTong() { // TODO Auto-generated method stub System.out.println("公交"); } } public class ZixingChe implements JiaotongGongJu { @Override public void xuanzeJiaoTong() { // TODO Auto-generated method stub System.out.println("自行车"); } } public class Feiji implements JiaotongGongJu { @Override public void xuanzeJiaoTong() { // TODO Auto-generated method stub System.out.println("飞机"); } }
策略封装
public class Celue { public void xuanzejiongtong(JiaotongGongJu mJiaotongGongJu){ if(mJiaotongGongJu != null){ mJiaotongGongJu.xuanzeJiaoTong(); } } }
策略选择触发
public class CelueMain { public static void main(String[] args) { Celue celue = new Celue(); celue.xuanzejiongtong(new Feiji()); } }
版权声明:如无特殊标注,文章均为本站原创,转载时请以链接形式注明文章出处。
评论