策略模式

举报
小鲍侃java 发表于 2021/09/09 23:49:26 2021/09/09
【摘要】 场景:当不同条件调用不同的算法或者策略时。 优点:1.可以减少大量的if else,减少耦合度。            2.方便扩展和维护 缺点:1.类的数量变多,机构变复杂了。            2.向外...

场景:当不同条件调用不同的算法或者策略时。

优点:1.可以减少大量的if else,减少耦合度。

           2.方便扩展和维护

缺点:1.类的数量变多,机构变复杂了。

           2.向外暴露了策略

类图:

策略模式类图

代码:

策略接口


      public interface Strategy {
      public void method();
      }
  
 

策略实现


      public class StrategyA implements Strategy {
         @Override
         public void methodA() {
              System.out.println("方法A");
          }
      }
  
 

      public class StrategyB implements Strategy {
         @Override
         public void methodB() {
              System.out.println("方法B");
          }
      }
  
 

      public class StrategyC implements Strategy {
         @Override
         public void methodC() {
              System.out.println("方法C");
          }
      }
  
 

上下文角色


      public class Context {
      //抽象策略
      private Strategy strategy = null;
      //构造函数设置具体策略
      public Context(Strategy strategy) {
        this.strategy = strategy;
      }
      public void setContext(Strategy strategy) {
        this.strategy = strategy;
      }
      //封装后的策略方法
      public void doMethod() {
        this.strategy.method();
      }
      }
  
 

调用(如果为了美化 可以将这个类设计为工厂 这样可以保持对入口的统一管理)


      public class Client {
      public static void main(String[] args) {
      //声明上下文对象
      Context context = new Context();
      context.setContext(new StrategyA());
      //执行封装后的方法
      context.method();
      context.setContext(new StrategyB());
      //执行封装后的方法
      context.method();
      }
      }
  
 

 

文章来源: baocl.blog.csdn.net,作者:小黄鸡1992,版权归原作者所有,如需转载,请联系作者。

原文链接:baocl.blog.csdn.net/article/details/102568385

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。