案例分析:设计模式与代码的结构特性——策略模式

1 设计模式

  设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

  设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

2 设计模式之策略模式

1)模式定义

  策略模式(Strategy Pattern),定义一系列的算法,将每一种算法封装起来并可以相互替换使用,策略模式让算法独立于使用他的客户应用而独立变化。

  策略模式的决定权在用户,系统本身提供给不同算法的实现,新增或者删除算法,对各种算法做封装。因此,策略模式多用在算法决策系统中,外部用于只需要决定使用哪个算法即可。

2)应用实例

  1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。

3)优点

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

4)缺点

  1、策略类会增多。 2、所有策略类都需要对外暴露。

5)使用场景

  1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

 3 实现

  一个自己写的小实例:报价管理问题

  向客户报价,对于销售部门的人来讲,这是一个非常重大,非常复杂的问题,对于不同的客户要报不同的价格,例如有新客户、老客户、VIP客户、大订单客户等。

  本次使用Java编写了一个简单的Demo,实现如下功能:

  1)对普通客户或者新客户抱原价

  2)对老客户报的价格,统一折扣5%

  3)对VIP客户报的价格:统一折扣10%

  先给出类图:

  

  代码如下:

  策略接口:

  

   接下来看看具体的算法实现,不同的算法,实现也不一样,对于普通客户和新客户:

  

   对于来客户:

  

   对于VIP客户:

  

   然后是价格管理类:

  

   最后测试一下:

  

   输出结果:

  

原文地址:https://www.cnblogs.com/sovegetabable/p/11997886.html