java 策略模式

这篇具有很好参考价值的文章主要介绍了java 策略模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

策略模式(Strategy Pattern)

  指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。将每个算法封装在独立的类中,使得它们可以互相替换。可以在运行时根据需要选择不同的算法,而不需要修改客户端代码。

  主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。

  关键代码:实现同一个接口。

  优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性良好。

  缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。 3、客户端知道所有的算法或行为的情况。

  注意事项:如果一个系统的策略多于四个,就需要考虑使用混合模式,解决策略类膨胀的问题。

  组成:

    1.抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
    2.具体策略角色:包装了相关的算法和行为。
    3.环境角色:持有一个策略类的引用,最终给客户端调用。环境类可以通过依赖注入、简单工厂等方式来获取具体策略对象。
======================================================== 以上八股文 来源  网络拼凑 ======================================================================
注 :  上述所谓的 算法  不仅仅代表 冒泡排序,归并排序,二分查找  等这种具体的算法,  也代表 某些 业务逻辑,方法运行策略等(不要狭义的看问题)
  举个简单小栗子:
    当操作数据库时(抽象策略角色), 用到了 增删改查  (具体策略角色)四种 方式, 通过id 查询 , 通过id 修改, 通过 id 删除, 增加一个 id  数据 (维护当前使用 策略的对象【环境角色】)。
/**
 * 操作数据库时(抽象策略角色)
 */
public interface OperateStrategy {
    String operation(String id);
}


/**
 * insert操作 (具体策略角色)
 */
public class OperateInsert implements OperateStrategy{
    @Override
    public String operation(String id) {

        return "insert into  success !!  id ==" + id ;
    }
}

/**
 * Select操作
 */
public class OperateSelect implements OperateStrategy{
    @Override
    public String operation(String id) {
        return "select success !!  id ==" + id ;
    }
}

/**
 * Delete操作
 */
public class OperateDelete implements OperateStrategy{
    @Override
    public String operation(String id) {
        return "delete success !!  id ==" + id ;
    }
}

/**
 * Update操作
 */
public class OperateUpdate implements OperateStrategy{
    @Override
    public String operation(String id) {
        return "update success !!  id ==" + id  ;
    }
}

/**
 * Context 执行上下文(环境角色)
 */
public class OperateContext {

    private OperateStrategy operateStrategy;

    public OperateContext(OperateStrategy operateStrategy){
        this.operateStrategy = operateStrategy;
    }

    public String execute(String id){
        return operateStrategy.operation(id);
    }

}

    //执行
    public static void main(String[] args) {
        OperateContext context = new OperateContext(new OperateSelect());
        System.out.println(context.execute("select01"));

        context = new OperateContext(new OperateDelete());
        System.out.println(context.execute("delete01"));

        context = new OperateContext(new OperateUpdate());
        System.out.println(context.execute("update01"));

        context = new OperateContext(new OperateInsert());
        System.out.println(context.execute("Insert01"));

    }

结果:

java 策略模式

 文章来源地址https://www.toymoban.com/news/detail-851619.html

==========================================收工=================================================================================

 

 

 
 
 
    
  

到了这里,关于java 策略模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java设计模式—策略模式(Strategy Mode)

    目录 前言 一、策略模式的简介 二、策略模式的概念 三、策略模式的作用 四、策略模式的优、缺点 策略模式的优点: 策略模式的缺点: 五、策略模式应用场景 六、代码案例 1)抽象接口类 2)具体的策略类:减 3)具体策略类:打折 4)上下文类 5)客户端Main代码测试 总结

    2024年02月08日
    浏览(31)
  • 【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

    有各种鸭子,比如野鸭、北京鸭、水鸭等。 鸭子有各种行为,比如走路、叫、飞行等。不同鸭子的行为可能略有不同。要求显示鸭子的信息 不同的鸭子继承一个父类Duck,如果是相同的行为就继承,不同行为就重写方法 实现 【鸭子抽象类】 【野鸭】 【北京鸭】 【玩具鸭】

    2024年02月12日
    浏览(43)
  • 设计模式-策略模式 Strategy

    该模式最常见的应用场景是,利用它来避免冗长的 if-else 或 switch 分支判断。不过,它的作用还不止如此。它也可以像模板模式那样,提供框架的扩展点等等。 策略模式,英文全称是 Strategy Design Pattern。该模式是这样定义的: Define a family of algorithms, encapsulate each one, and make

    2024年02月20日
    浏览(28)
  • 策略模式Strategy

    2024年02月12日
    浏览(40)
  • 策略模式(Strategy)

    策略 是一种行为设计模式,它能让你定义一系列算法,并将 每种算法分别放入独立的类中,以使算法的对象能够相互替换。 1. 问题 你打算为游客们创建一款导游程序。该程序的核心功能是提供美观的地图,以帮助用户在任何城市中快速定位。 用户期待的程序新功能是自动

    2024年02月12日
    浏览(25)
  • 策略模式(Strategy)

    策略模式是一种行为设计模式,就是定义一系列算法,然后 将每一个算法封装起来 ,并使它们 可相互替换 。本模式通过定义一组可相互替换的算法,实现将算法独立于使用它的用户而变化。 为实现一系列可相互替换的算法,可定义一个公共接口,然后定义一组实现该接口

    2024年02月14日
    浏览(35)
  • 虾皮一面:手写一个Strategy模式(策略模式)

    在40岁老架构师 尼恩的 读者交流区 (50+)中,最近有指导一个小伙伴面试架构师,面试的公司包括虾皮、希音、美团等大厂,目标薪酬50K以上,遇到了一个比较初级的问题: 请手写一个Strategy模式(策略模式) 或者请手写一个template模式(模板模式) 或者请手写一个proxy模式(

    2024年02月16日
    浏览(22)
  • 【设计模式-02】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月16日
    浏览(31)
  • 【设计模式-03】Strategy策略模式及应用场景

    Java 官方文档 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月22日
    浏览(28)
  • C++设计模式_04_Strategy 策略模式

    接上篇,本篇将会介绍C++设计模式中的 Strategy 策略模式 ,和上篇 模板方法Template Method 一样,仍属于“组件协作”模式,它与Template Method有着异曲同工之妙。 在软件构建过程中,某些对象使用的算法可能多种多样ÿ

    2024年02月09日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包