ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Head First Design Pattern》——策略模式

2021-05-21 12:35:25  阅读:188  来源: 互联网

标签:Head 策略 Pattern 算法 Design 鸭子 Duck 抽象类 定义


策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

设计原则:

  1. 需要变化的代码要和不需要变化的代码分开。即把会变化的部分取出并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分。
  2. 针对接口编程,而不是针对实现编程。
  3. 多用组合,少用继承。

 

 

我的理解:

类似书中提到的鸭子的例子,鸭子会飞,会叫。但是每种鸭子叫和飞的方式不一样,这是变化的部分。具体的类,即鸭子,可以选择会飞还是不会飞,会叫还是不会叫,就像选择策略一样。那么这些算法/策略,可以定义为一个接口。

 

 

 

 

有抽象类 Duck,有多种策略FlyBehavior、QuackBehavior可选。

如果要存在一个具体的 Aduck 类,那么只要继承 Duck,然后就可以拥有它自己定义的算法。(所以这一步需要抽象类 Duck 的策略定义是接口,利用了多态。)

所谓“拥有它自己定义的算法”

例如,有一个类 Aduck,

Aduck.setFlyBehavior(new FlyWithWings());

 

为什么要有抽象类 Duck 呢?因为如果我们想要增加策略,例如购物打折那种,可以存在很多的算法/策略。那么可以直接在抽象类上定义,不用一个一个修改具体类。

(那新增了策略以后,不是所有的具体类都是重新赋值一下这个新的策略吗?还是说在抽象类中可以设置一个默认的?)

 

标签:Head,策略,Pattern,算法,Design,鸭子,Duck,抽象类,定义
来源: https://www.cnblogs.com/isxyl/p/14793231.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有