【设计模式】策略模式

策略模式

策略模式:定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。

前面写了简单工厂模式,其主旨是通过父类衍生出各种产品子类,再通过多态的方式生产各种产品。

但如果说出现的产品过多,就需要写大量的产品子类。这是无可避免的。

而策略模式,从类图上看与简单工厂类似,但其本质是封装算法逻辑,这是与简单工厂的主要区别。

策略模式是一种定义一些列算法的方法,这些所有的算法都是完成相同的工作,只是实现不同。它可以通过相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合。

策略模式的 Strategy 类层次为 Context 定义了一系列的可供重用的算法或行为。继承有助于析取出这些算法中的公共功能。

策略模式就是用来封装算法的,但在实践中,我们发现可以用它来封装几乎任何类型的规则,只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式处理这种变化的可能性。


注:

通过与简单工厂对比,我发现两者的主要逻辑是一致的。都有产品类(策略类),和继承的具体产品类(具体算法类),以及使用switch根据种类选择的工厂类(上下文类)。

进一步对比后发现:

简单工厂模式下,产品类(父类)里包含了产品的属性,所以每个具体产品(子类)也就包含了同样的属性。

策略模式下,策略类(父类)里只提供了虚方法,并没有包含属性,所以每个具体的算法有自己独立的属性。

posted @ 2020-01-07 15:15  LampsAsarum  阅读(3380)  评论(0编辑  收藏  举报