`

JAVA设计模式之Strategy模式

阅读更多

现在需要封装一个算法,但是该算法有很多种不同的实现,比如,一个排序算法,可能有插入排序,冒泡排序,快速排序等不同的实现,而且要求这些算法由使用者来决定具体使用的是哪个算法,如何来设计呢?

这是,我们就会用到策略模式了,策略模式,就是将一个算法的不同实现封装成一个个单独的类,这些类实现同一个接口,使用者直接使用该接口来访问具体的算法。这个样子,使用者就可以使用不同的算法来实现业务逻辑了。策略模式的组件如下:

策略模式组件图

可见,策略模式中,Context(使用者)通过接口来访问算法的,这样,在运行中,由用户来决定应该选择哪个实现。

上一篇中说到模板方法模式,仔细观察下,模板方法模式和策略模式,是不是有种相似的部分呢?

假如现在,我们将Strategy换成一个抽象类,你是否觉得恍然大悟呢?其实,策略模式,和模板方法模式有很多相像的地方。模板方法模式中是将不变的逻辑放在父类中,子类只需要实现可变的部分。而在策略模式中,将所有的操作都由各个子类来实现。

所以,假如有下面一种情况存在,现在这个算法中有很多不变的部分,那我们该怎么做呢?

1、可以定义一个回调类SameCallBack,其中定义一个方法doTheSame(),这样,在每个具体实现类的execute方法中回调这个方法。

看下面类图:

迭代

这样,在Context的doExecute方法中可以如下

在每个具体的Strategy实现类中的execute方法,回调这个相同的方法,如下:

这种方式灵活性比较高。

当然,你也可以使用策略模式和模板模式结合的方式,定义一个抽象类,该抽象类实现Strategy接口,然后所有的具体类来继承该抽象类。在抽象类中实现算法的骨架部分。这样也可以实现。对应的类图如下:

vv

这种方式虽然可行,但是没有上一种方式灵活,且这种方式也继承了模板方法模式的缺点,占用了继承。

分享到:
评论

相关推荐

    Java设计模式之Strategy模式

    Strategy模式即策略模式,就是将一个算法的不同实现封装成一个个单独的类,这些类实现同一个接口,使用者直接使用该接口来访问具体的算法。这个样子,使用者就可以使用不同的算法来实现业务逻辑了。

    Java设计模式 设计模式介绍

    2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、设计模式之Strategy(策略) 10、设计模式之...

    JAVA设计模式chm文档

    创建模式: 设计模式之Factory 设计模式之Prototype(原型) 设计模式之Builder 设计模式之Singleton(单态) ...设计模式之Strategy(策略) 设计模式之Mediator(中介者) 设计模式之Interpreter(解释器) 设计模式之Visitor

    JAVA设计模式之行为模式

    这是JAVA设计模式中属于行为模式的部分,包括Template(模板模式)、Chain of Responsibility(责任链模式)、Memento(纪念品模式)、Mediator(中介模式)、Strategy(策略模式)、State 、Observer(观察者模式)、Visitor...

    【Java设计模式】(2)策略模式Strategy

    【Java设计模式】(2)策略模式Strategy

    java设计模式之Strategy.pdf

    java设计模式之Strategy.docx

    33种JAVA设计模式DEMO

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...

    [Java设计模式(第2版)(Design.Patterns.in.Java).John.Metsker

    《java设计模式(第2版)》通过一个完整的java项目对经典著作design patterns一书介绍的23种设计模式进行了深入分析与讲解,实践性强,却又不失对模式本质的探讨。本书创造性地将这些模式分为5大类别,以充分展现各个...

    Java 设计模式-策略模式(Strategy)Android讲解

    设计模式-策略模式(Strategy)结合Android小知识讲解,简单明了

    java设计模式之Strategy (2).pdf

    java设计模式之Strategy (2).docx

    java设计模式期末考试选择题100道

    适合Java设计模式期末考试选择题复习,形式如下: 10.(单选题)Facade(外观)模式的意图是 正确答案: A A.希望简化现有系统的使用方法,你需要定义自己的接口 B.将一个无法控制的现有对象与一个特定借口相匹配。 C....

    java设计模式教程+源代码

    AbstractFactory ( 抽象工厂 ) FactoryMethod ( 工厂方法 ) Singleton ( 单态模式 ) Builder ( 建造者模式 ) ...Strategy ( 策略模式 ) TemplateMethod ( 模板方法 ) Visitor ( 访问者模式 )

    java 23种设计模式及具体例子

    java 设计模式 java 设计模式是软件工程的基石,它们被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式可以让代码更容易被他人理解、保证代码可靠性、提高代码的重用性。 一、设计模式...

    java设计模式之工厂方法模式

    java设计模式之工厂方法模式 学习设计模式已经有一段时间了,但经常还是会很困惑。看书上的代码会发现很多不同的设计模式的代码结构非常相似。比如 Bridge 和 Strategy 。。。 设计模式就是我们设计过程中经常出现的...

    Java设计模式之策略模式(Strategy模式)介绍

    主要介绍了Java设计模式之策略模式(Strategy模式)介绍,Strategy是属于设计模式中对象行为型模式,要是定义一系列的算法,这些算法一个个封装成单独的类,需要的朋友可以参考下

    用Java实现23种设计模式

    用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...

    java设计模式之策略模式

    java设计模式之策略模式 内含策略模式讲解ppt 自己根据ppt写了一个小例子 先不用策略模式 后用策略模式 形成了鲜明对比 对初学者很有用

    《JAVA与模式》之策略模式

    javase 设计模式的strategy pattern《JAVA与模式》之策略模式详解

Global site tag (gtag.js) - Google Analytics