`

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设计模式之工厂方法模式

    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与模式》之策略模式详解

    java设计模式---诙谐易懂版

    第 1 章 策略模式【Strategy Pattern】 刘备要到江东娶老婆了,走之前诸葛亮给赵云(伴郎)三个锦囊妙计,说是按天机拆开解决棘手问题, 嘿,还别说,真是解决了大问题,搞到最后是周瑜陪了夫人又折兵呀,那咱们先看...

Global site tag (gtag.js) - Google Analytics