设计模式:策略模式(Strategy Design Pattern)

个人觉得学习设计模式的话,还是应该注重各种设计模式的应用场景,23种设计模式真的挺多的,要靠死记硬背的话还是没那么容易记住。所以我建议可以在自己实际编码时,套用上各种设计模式。
策略模式是一个很好的例子,如果需要用到大量的if~else判断的话,就可以用到策略模式
我们使用的app大多都有分享的功能,我们可以选择分享到不同的地方,比如微博、微信、QQ等等,虽然是同一个内容,但是分享到不同的平台就会有不同的处理方式,比如要跳转到不同的app或者直接复制链接等等。如果让你来实现这个功能,你会如何实现呢?
在这里插入图片描述
用了策略模式之前:

public void Share{
public void shareOptions(String option){
       if(option.equals("微博")){
           //function1();
           //...
      }else if(option.equals("微信")){
           //function2();
           //...
      }else if(option.equals("朋友圈")){
           //function3();
           //...
      }else if(option.equals("QQ")){
           //function4();
           //...
      }
       //...
}

这样的话如果以后要修改这些分享方式的话,可读性不够高。
如果我们用上了策略模式:
1.分享方式类:

//定义策略接口
public interface DealStrategy{
   void dealMythod(String option);
}

//定义具体的策略1
//新浪
public class DealSina implements DealStrategy{
   @override
   public void dealMythod(String option){
       //...
  }
}

//定义具体的策略2
//微信
public class DealWeChat implements DealStrategy{
   @override
   public void dealMythod(String option){
       //...
  }
}

2.上下文:


//定义上下文,用于使用DealStrategy角色
public static class DealContext{
   private String type;
   private DealStrategy deal; //分享方式
   
   public  DealContext(String type,DealStrategy deal){
       this.type = type;
       this.deal = deal;
}
   public getDeal(){
       return deal;
   }
   public boolean options(String type){
       return this.type.equals(type);
   }
}

3.share类:

public void Share{
   private static List<DealContext> algs = new ArrayList();   //静态代码块,先加载所有的策略
   static {
          	algs.add(new DealContext("Sina",new DealSina()));
          	algs.add(new DealContext("WeChat",new DealWeChat()));
          }
    public void shareOptions(String type){ 
          DealStrategy dealStrategy = null;
          for (DealContext deal : algs) { 
 			if (deal.options(type)) {              
  				dealStrategy = deal.getDeal();        
        		break;       
            	}       
            }      
    dealStrategy.dealMythod(type); 
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值