策略模式

一、模式简介

定义:定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。
场景:一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中。

  • 角色结构:
  • 抽象策略(Strategy)类:定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,环境角色使用这个接口调用不同的算法,一般使用接口或抽象类实现。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现。
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

二、模式实现

public interface Strategy { -> 抽象策略
    void strategy();
}

public class FirstStrategy implements Strategy{ -> 具体策略
    public void strategy() {
        System.out.println("使用第一种策略");
    }
}

public class SecondStrategy implements Strategy { -> 具体策略
    public void strategy() {
        System.out.println("使用第二种策略");
    }
}

public class ThirdStrategy implements Strategy{ -> 具体策略
    public void strategy() {
        System.out.println("使用第三种策略");
    }
}

public class Context { -> 环境
    private Strategy strategy;
    
    public Context(Strategy strategy){
        this.strategy=strategy;
    }
    
    public void strategy(){
        strategy.strategy();
    }
}

以白领上班选择乘坐的交通工具为例子,可以选择公交、地铁、跑车等等,将这些选择方式的算法封装到策略类中,隐藏策略具体的实现细节,如白领无须知道交通工具是怎样运作的。

Context context = new Context(new FirstStrategy());
context.strategy();
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1 场景问题# 1.1 报价管理## 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的...
    七寸知架构阅读 5,136评论 9 62
  • 1 场景问题 1.1 报价管理 向客户报价,对于销售部门的人来讲,这是一个非常重大、非常复杂的问题,对不同的客户要...
    4e70992f13e7阅读 3,134评论 2 16
  • 本文仅仅为入门,高手勿喷。 实际工作中,我们总会遇到类似如下的需求:某支付系统接入以下几种商户进行充值:易宝网易,...
    JarvanMo阅读 14,267评论 14 26
  • 1.概述 demo地址,欢迎star 例子1: 商场产品销售:可以正常价格售出,可以打折形式售出,也可以通过积分的...
    barry阅读 803评论 0 1
  • 在某天清晨他看到了一封没有邮戳的信 也许是因为她字间阳光的味道,他觉得他喜欢上了她。 于是他们开始联系,成为朋友,...
    水水水轻侮阅读 294评论 0 1