策略模式使继承关系之间的变更成为了可能,继承能够在策略模式下对各种算法和行为处置。在没有策略模式的帮助下,这些需要用到算法和行为类的子类,可能会存在于它们本身的类中,不同的子类会呈现不一样的算法和行为。这样会造成的结果是,调用这些算法和行为的会和它们自身混为一谈。确认用什么算法或者选择什么行为的逻辑会与算法或行为的逻辑夹杂在一起,所以不可能实现单独演变。
策略模式的恰当利用,能让多重条件转移语句得到避免。这种语句非常不方便文护,因为它会造成算法与逻辑的混乱。这种把所有算法放在一个相同的语句中的方法,是非常不可取的,它比使用继承的办法还要原始和落后。
3 策略模式的原理
3.1策略模式的定义
策略模式对一系列的算法进行了界说。把算法独立地封装,让算法之间彼此实现替换,并且提供统一的一个或多个接口给用户。算法在策略模式的帮助下,可以做到独立于客户实现转变。
策略模式的功用非常强,把对象自身和运算规则区别开。策略模式本身的重要主旨就是面向对象编程的多形多态性。
策略模式的功能:使具体的算法的完成不再在具体的业务中实现,使它们完成独立的算法类,以此形成一系列的算法,并且让这些算法可以实现相互替换的功能。
策略模式首要的是怎么样构造、调用算法以便使程序结构变得更方便文护,而不是把关注的中心放在如何完成算法的实现完成。这些策略算法是彼此单独实现的,他们之间是无依赖的,因为他们不但有很优秀的可文护性,还有可扩展性也是不可忽视的优势。
3.2策略模式的组成
—抽象策略角色通常用到一个接口或者抽象类得以实现,是一个策略类。
—具体策略角色把具体相关的算法和行为包装起来。
—环境角色中持有一个对策略类的引用,最终起到让客户端调用的作用。
3.3策略模式的概念
Context(应用场景):
1、要从几个ConcreteStrategy中选择一个具体的算法。
2、 文护一个Strategy的实际例子。
3、 在动态设置运行时负责对Strategy具体算法的实现。
4、和Strategy之间的数据传递与交互也由它负责。
Strategy(抽象策略类):
抽象策略类界说了一public的接口,应用场景类通过这个接口调用相对应的算法,不相同的算法通过不同的方式实现这个public接口。抽象策略类一般使用抽象类或接口来实现。
ConcreteStrategy(具体策略类):
通过提供具体的算法实现来实现Strategy定义的接口。
Client
Strategy
Algorthminterface()
Context
Contextinterface
Strategy
ConcreteStrategy C
Algorthminterface()
ConcreteStrategy B
Algorthminterface()
ConcreteStrategy A
Algorthminterface()
策略模式以以下两条原则为基础:
(1)对象都具有不同的职责,这些不同的职责的具体实现是在多态的使用的基础上完成的。
(2)需要管理那些概念上相同但具有不同实现的算法,把问题域中的各个行为互相分离独立开来,也就是实现解耦和。这使得我们在要修改时,只需负责某一行为的类,不会对其它的类产生不良影响,是一个非常好的设计实践。
3.4策略模式的优缺点
优点:
1、策略类的品级布局结构界说了一个算法或行为族。策略模式供应了办理与之有关的的算法族的方式。相同的代码可以被防止,只需得当地运用继承,把public的代码放到father类里面。
2、 继承可以处理多种算法或行为吗,策略模式提供了可以替换继承关系的办法。若不使用策略模式,那么使用算法或行为的环境类就可能会有一些子类存在于算法或行为的环境类,每一个子类都会提供一个不同的算法或行为。如此做法的结果是,算法或行为的使用者就和算法或行为本身混在一起。确认用什么算法或者选择什么行为的逻辑会与算法或行为的逻辑夹杂在一起,所以不可能实现单独演变。继承让改变算法或者是行为的灵活性变差,动态的改变变得难以成立。 3、 策略模式的恰当利用,能让多重条件转移语句得到避免。这种语句非常不方便文护,因为它会造成算法与逻辑的混乱。这种把所有算法放在一个相同的语句中的方法,是非常不可取的,它比使用继承的办法还要原始和落后。 策略模式在软件设计中的应用(2):http://www.751com.cn/jisuanji/lunwen_37596.html