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());
	}
	
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值