首页 > 其他分享 >设计模式-策略模式

设计模式-策略模式

时间:2022-12-13 09:57:58浏览次数:36  
标签:策略 实现 代码 模式 线程 设计模式

设计模式-策略模式

   代码写作过程中,设计模式是对某些固定场景代码写作的总结和优化,最常见的设计模式,除了单例模式外,还有工厂模式和策略模式。

  工厂模式是一种创建型模式,他的作用是创建对象,策略模式是一种行为型模式,他的作用是选择行为。一个关注对象创建,一个关注行为封装。

  策略模式主要解决代码中繁杂的if-else的语句的一种设计方案。使代码更简洁,便于维护。

策略模式的优点

1、降低了多重条件语句伴随的维护难度高的问题

2、恰当的使用了继承,减少了冗余代码

3、贴合开闭原则,保证尽可能少对原代码更改的前提新增了功能

策略模式的缺点

随着策略的不断增多会导致策略类数量庞大(可通过混合模式解决)

策略模式的实现:

i 定义行为接口

 

ii 行为接口的多个实现类

1 支付宝支付

 

2 微信支付

 

3银行卡支付

 

iii 一个策略上下文类,用来构造接受具体实现类,提供统一入口

 

这样就实现了一个完整的策略模式,如果不用这个模式,就要用繁杂的if-else,策略模式的风格更接近与开闭原则,扩展方便,插拔也方便。

测试代码:

 

Iv 策略模式在源码中的应用

1 比较器Comparator

在Java的集合框架中,经常需要通过构造方法传入一个比较器Comparator,或者创建比较器传入Collections的静态方法中作为方法参数,进行比较排序等,使用的是策略模式。

在该比较架构中,Comparator就是一个抽象的策略;一个类实现该结构,并实现里面的compare方法,该类成为具体策略类;Collections类就是环境角色,他将集合的比较封装成静态方法对外提供api。

2 ThreadPoolExecutor中的四种拒绝策略

在创建线程池时,需要传入拒绝策略,当创建新线程使当前运行的线程数超过maximumPoolSize时,将会使用传入的拒绝策略进行处理。 - AbortPolicy:直接抛出异常。 - CallerRunsPolicy:只用调用者所在线程来运行任务。 - DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。 - DiscardPolicy:不处理,丢弃掉。

这里使用的就是策略模式。

 总结:

策略模式是一种对同一方法多种实现行为的封装,有利于调用方的统一调用,避免了代码中冗繁的if-else判断语法,也有利于扩展或删除某一实现类,是一种让这种场景下代码简洁,符合开闭思想的好方法。

标签:策略,实现,代码,模式,线程,设计模式
From: https://www.cnblogs.com/zhaoblog/p/16977750.html

相关文章

  • MongoDB - 数据模型的设计模式
    简介官方文章的地址是BuildingwithPatterns:ASummary,其中汇总了12种设计模式及使用场景。上述的图表列举了12种设计模式及应用场景,主要是以下这些:近似值模式......
  • 工厂方法模式在开发中的应用
    事件是这样的,我的每个页面都有一些属性,我拿其中一个属性PageTitle为例,它是一个ArrayList它是页面标题导航的意思,就是说它的标题用来存储一些标题导航,比如,产品列表页,它的Page......
  • java实现微信服务(公众)号用户关注时,获取openid,安全模式下的加密解密实现
    大家好,我是雄雄,欢迎你的到来~前言需求是这样的,当用户关注公司服务(公众)号时,就自动注册成为了会员,且通过小程序设置提醒,然后后台可以通过服务(公众)号给用户推送模板信息。实现......
  • 浅谈单例模式的几种实现
     单例模式(来自菜鸟教程)单例模式(SingletonPattern)是Java中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一......
  • JAVA 单例模式 饿汉和懒汉
    单例模式特点:①单例类只能有一个实例②私有构造方法,不允许通过其他类创建单例类的实例③提供静态get方法返回单实例饿汉式:类加载的时候就创建实例懒汉式:类加载时不创建......
  • 微软新商业模式:想用Windows 10?掏钱!
    Windows10是微软的标志性产品,随着时代的变化,Windows授权营收不断下降。无奈之下,微软只好寻找新办法从客户手中“榨取”更多的金钱。ZDNET最近刊文对微软的策略变化进行......
  • iOS监听模式系列之键值编码KVC、键值监听KVO的简单介绍和应用
    键值编码KVC我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象。其实由于ObjC的语言特性,你根部不必进行......
  • PaaS平台管理应用的优势和策略
    在应用运行管理的环境中,PaaS模糊了物理资源的限制,在应用看来是一个按需索取、无限可扩的虚拟平台,如图1所示。PaaS作为云应用的运行环境,云应用通过PaaS所提供的编程接口API按......
  • PaaS平台管理应用的优势和策略
     在应用运行管理的环境中,PaaS模糊了物理资源的限制,在应用看来是一个按需索取、无限可扩的虚拟平台,如图1所示。PaaS作为云应用的运行环境,云应用通过PaaS所提供的编程接口......
  • 洞察 | 软件定义汽车时代下,汽车制造产业的应对策略
      汽车产业作为先进制造行业,伴随着数字化技术,电气化技术的迭代正快速的成长,而随着智能汽车、自动驾驶概念的提出,整车制造的软硬件复杂度也在持续提升,软件定义汽车转型......