合作开发的这段时间,看了不少设计模式,这次分享下我对几个模式的理解,这次说说“策略模式”
官方定义:策略模式定义了算法族,分别封装起来,使算法之间可以相互替换,使算法族独立于使用它的客户。
如何理解呢?定义里说到的“封装算法”,这我们可以理解成封装变化,这是设计模式里重要的原则之一。把容易变化的部分抽取出来,以便以后需求变化时修改此部分,而不会影响不变的部分。
封装完,是如何达到相互替换的呢?这需要使用到设计模式的另一个原则:面向接口编程。
面向接口编程和简单的使用接口有何不同呢?
简单的使用接口是这样:定义一个鸭子类,然后定义一个飞行接口。鸭子如果向飞,直接拿接口实现就可以了。如果还有其他的很多动物像猫呀,狗呀什么的想要飞,就拿这个接口来实现了。这样的好处是谁想实现都可以拿去用,非常灵活。那缺点是什么呢?缺点是,代码的复用性低,想要实现就得自己把内实现内容敲出来。
面向接口编程怎么解释呢:面向接口编程可以理解成“面向超类编程”。打个比方,把超类理解成变量的声明类型,实现该接口的类就是变量。类的任何对象都符合该类型,也就是都可以付给超类。
如何再模式图和代码中实现面向接口编程呢?这时候用策略模式来解释,就十分恰当了
这张图就是策略模式的一个应用:Duck类是实现算法的客户,封装起来的飞行和叫的行为就是算法。通过客户的duck类的setFlyBehavior和setQuackBehavior方法,设置具体要实现的封装中的方法。这样把要实现的行为交给了外部类,从而实现了松耦合,也就是面向接口编程的好处。
灵活的运用接口不是把接口实现在类里,而是通过接口调用实现接口的类。换个解释方法,不要继承,要组合,组合的好处在于降低了类间的耦合。
这是我对策略模式的理解,与其说讲模式,不如说通过模式讲模式原则,只懂模式只能生搬硬套,懂了原则用模式肯定没问题。
分享到:
相关推荐
深入浅出设计模式之策略模式.pptx
深入浅出设计模式,比head first更易懂,共讲解了22种设计模式: 工厂模式 单例模式 建造模式 原型模式 适配器模式 桥梁模式 组合模式 装饰模式 门面模式 享元模式 代理模式 责任链模式 命令模式 解析器模式 迭代器...
.................例子3_计时工资 博文链接:https://zfms.iteye.com/blog/1481020
PPT内容包括:内附代码,实例,方便理解。 继承、封装、多态、UML 设计模式02 设计模式03-创建型模式 ...设计模式16-策略模式、模板方法、访问者 此PPT实例便于理解,对于深入理解OO思想有很大帮助。
这是最为经典的东南大学出版社的《深入浅出设计模式》的第一章策略模式的ios软件实现! 陆续我还会将其余章源代码与大家分享。
文件类型为PDF文件,此文档对20多种java设计模式进行了详细讲解,在中文讲解的过程中还附有代码示例给学习者进行参考,使学习者通过实践更容易理解设计模式的原理。 本文档目录: 1.工厂模式 2.单例模式 3.建造...
单态模式和简单工厂模式 工厂方法模式 抽象工厂模式 代理模式 代理模式之动态代理 策略模式 建造模式 门面模式
深入浅出设计模式(C#版)--策略模式--示例代码
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
深入理解JavaScript系列(33):设计模式之策略模式 深入理解JavaScript系列(34):设计模式之命令模式 深入理解JavaScript系列(35):设计模式之迭代器模式 深入理解JavaScript系列(36):设计模式之中介者...
java23种设计模式,每一种模式都有详细的讲解,很全面,如果你想深入了解一下java23种设计模式,这会非常适合你的哦!上传乃为百度云连接,失效请留言。 内容: 001策略模式! N. B8 ~' D! f9 j+ g0 I 002观察者模式 ...
如果你想要深入透彻地理解和掌握设计模式,并期望能真正把设计模式应用到项目中去,那么这是你不可错过的一本好书。 《研磨设计模式》难度为初级到中级,适合与所有开发人员、设计人员或者即将成为开发人员的朋友。...
Java设计模式,目录:前言,UML建模技术,深入浅出UML类图,从招式与内功谈起——设计模式概述,面向对象设计原则,工厂三兄弟之简单工厂模式,工厂三兄弟之工厂方法模式,工厂三兄弟之抽象工厂模式,确保对象的唯一...
5.9StrategyPattern(策略模式) 261 5.9.1定义 261 5.9.2现实例子——去机场的策略 263 5.9.3C#实例——排序方法 263 5.9.4Java实例——多格式输出 266 5.9.5优势和缺陷 272 5.9.6应用情景 272 5.10...
5.9StrategyPattern(策略模式) 261 5.9.1定义 261 5.9.2现实例子——去机场的策略 263 5.9.3C#实例——排序方法 263 5.9.4Java实例——多格式输出 266 5.9.5优势和缺陷 272 5.9.6应用情景 272 5.10...
深入理解JavaScript系列(33):设计模式之策略模式 深入理解JavaScript系列(34):设计模式之命令模式 深入理解JavaScript系列(35):设计模式之迭代器模式 深入理解JavaScript系列(36):设计模式之中介者...
策略模式也是一种非常常用的设计模式,而且也不复杂。下面我们就来看看这种模式。 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立...
NULL 博文链接:https://bosshida.iteye.com/blog/1165049
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
主要介绍了深入理解JavaScript系列(33):设计模式之策略模式详解,策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户,需要的朋友可以参考下