设计模型之策略模式含UML完整实例)

设计模型之策略模式

1. 策略模式

1.1 定义与特点

  该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

  策略模式的主要优点如下:

  1. 多重条件语句不易维护,而使用策略模式可以避免使用多重条件语句。
  2. 策略模式提供了一系列的可供重用的算法族,恰当使用继承可以把算法族的公共代码转移到父类里面,从而避免重复的代码。
  3. 策略模式可以提供相同行为的不同实现,客户可以根据不同时间或空间要求选择不同的。
  4. 策略模式提供了对开闭原则的完美支持,可以在不修改原代码的情况下,灵活增加新算法。
  5. 策略模式把算法的使用放到环境类中,而算法的实现移到具体策略类中,实现了二者的分离。

  策略模式的主要缺点如下:

  1. 客户端必须理解所有策略算法的区别,以便适时选择恰当的算法类。
  2. 策略模式造成很多的策略类。
1.2 模式的结构

  策略模式是准备一组算法,并将这组算法封装到一系列的策略类里面,作为一个抽象策略类的子类。策略模式的重心不是如何实现算法,而是如何组织这些算法,从而让程序结构更加灵活,具有更好的维护性和扩展性,现在我们来分析其基本结构和实现方法。

  策略模式的主要角色如下:

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

  在现实生活中常常遇到实现某种目标存在多种策略可供选择的情况,例如,出行旅游可以乘坐飞机、乘坐火车、骑自行车或自己开私家车等。如果使用多重条件转移语句实现(即硬编码),不但使条件语句变得很复杂,而且增加、删除或更换算法要修改原代码,不易维护,违背开闭原则。

1.4 解决思路

  将这些策略算法抽象类一个接口,具体的策略算法封装成一个一个的类,实现策略接口,当选择发生变化,我们相应的替换策略就可以实现更换策略的目的,同时不会修改原代码,遵守开闭原则。

1.5 UML类图

  UML类图和解决方法请参考下面文章,策略模式的实现是依照依赖倒置原则的,例子和依赖倒置原则例子一样。
  设计原则之依赖倒置原则(实例加UML完整例子)

1.6 解决方案
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UML(Unified Modeling Language)是一种用于软件系统设计和分析的标准化建模语言。在软件开发过程中,UML可以帮助软件工程师和开发团队更好地理解和分析系统的需求和设计。下面我将给出一个完整UML分析与设计实例。 假设我们正在开发一个在线商城系统。首先,我们需要进行需求分析,确定系统的功能需求和用户需求。然后,我们可以使用UML中的用例图来描述系统的功能,例如用户注册、浏览商品、添加购物车、结算等。 接下来,我们可以使用UML中的类图来分析系统的类和对象之间的关系。在我们的在线商城系统中,可能会有用户类、商品类、订单类等。同时,我们可以使用UML中的时序图来描述系统中不同类之间的交互和消息传递。 在设计阶段,我们可以使用UML中的活动图来描述系统中的业务流程,例如用户下单的流程、商品库存管理的流程等。同时,我们可以使用UML中的状态图来描述系统中对象的状态转换,比如订单的状态转换。 最后,在实现阶段,我们可以使用UML中的部署图来描述系统如何部署在硬件设备上,例如Web服务器、数据库服务器等的部署。除此之外,我们还可以使用UML中的包图、组件图等来描述系统的结构和组件之间的关系。 通过上面的示例,我们可以看到在整个软件开发过程中,UML可以帮助我们更好地理解和分析系统的需求,并且帮助我们设计出更加健壮和可靠的软件系统。 UML的使用可以提高开发效率,降低开发成本,在实际的软件开发中具有非常重要的作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值