策略设计模式

定义:定义算法族,分别封装起来,让他们之前可以相互替换,算法的变化独立于使用算法的客户
优点:策略类之间可以切换,由于策略类实现同一个抽象,所以他们之间可以自由切换
易于扩展,增加一个新的策略对策略模式来说非常容易,基本上可以在不改变原来代码的基础上进行扩展
避免使用多重条件
缺点: 维护各个策略类会给开发带来额外开销
必须对客户端(调用者) 暴露所有的策略类
模式适用场景:
1)许多相关的类仅仅是行为有异。
2)需要使用一个算法的不同变体。
3)算法使用客户不应该知道的数据。
4)一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。

public interface IPayStrategy{
      public void pay();//支付
}


public interface IPayStrategy{
      public void pay();//支付
}

public interface IPayStrategy{
      public void pay();//支付
}

public interface IPayStrategy{
      public void pay();//支付
}
//负责调度,执行入口的上下文 context
public class PayStrategyContext {
    private IPayStrategy payStrategy;
    public PayStrategyContext() {
    }
    /**
     * 执行支付
     */
    public void excutePay() {
        if (null == payStrategy) {
            throw new RuntimeException("支付策略未配置");
        }
        payStrategy.pay();
    }
    public IPayStrategy getPayStrategy() {
        return payStrategy;
    }
    public void setPayStrategy(IPayStrategy payStrategy) {
        this.payStrategy = payStrategy;
    }
}


public class MainTest {
    public static void main(String[] args) {
        //执行上下文
        PayStrategyContext payStrategyContext = new PayStrategyContext();
        IPayStrategy payStrategy = null;
        //1.支付宝支付
        payStrategy = new AliPayStrategy();
        payStrategyContext.setPayStrategy(payStrategy);
        payStrategyContext.excutePay();
        //2.微信支付
        payStrategy = new WexinPayStrategy();
        payStrategyContext.setPayStrategy(payStrategy);
        payStrategyContext.excutePay();
        //3.银联支付
        payStrategy = new EBankPayStrategy();
        payStrategyContext.setPayStrategy(payStrategy);
        payStrategyContext.excutePay();
    }
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 9,183评论 0 14
  • 原文收录在我的 GitHub博客 (https://github.com/jawil/blog) ,喜欢的可以关注...
    微醺岁月阅读 6,988评论 0 20
  • 引言 这是在项目开发过程中的需求:用户Zing_LYF在photo2频道中发布了内容为“是不是真的”的感言,除了头...
    小丫小峰子阅读 2,895评论 0 1
  • (-) 提出问题 朋友们在开发中有没有遇到过这种情况:想封装一些算法,不想让算法直接暴露出来?或者项目里面的一些i...
    idage阅读 10,088评论 3 13
  • 仙人掌,是仙人掌科,仙人掌属的一种植物。别名仙巴掌、观音掌、霸王树、龙舌等,主要分布在南美洲、非洲、中国南方及东南...
    coffee漫阅读 3,733评论 0 2

友情链接更多精彩内容