博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android 源码设计模式之--策略模式
阅读量:804 次
发布时间:2019-03-25

本文共 2188 字,大约阅读时间需要 7 分钟。

 

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

 

转载地址:http://zrguk.baihongyu.com/

你可能感兴趣的文章