设计模式学习笔记(一)--策略模式
来源:互联网 发布:区域合并算法 matlab 编辑:程序博客网 时间:2024/06/06 05:42
最近学习了Head First设计模式,获益良多,特写笔记记录备忘ヾ(๑╹◡╹)ノ”
这边书通俗易懂,强推~ヾ(◍°∇°◍)ノ゙
(PS:由于书本中的例子和阐述等在网上都能找到,so,我只画重点,例如该模式的框架、涉及到的原则~勿怪勿怪~)
以下正文ヽ( ̄▽ ̄)ノ)
策略模式
简要概括:书本以“鸭子”这个对象为例,在对“鸭子”进行各种需求化的实例过程中,进而引出策略模式。(该鸭子的外貌特征,鸭子的行为:会叫吗,会飞吗….)
伪代码:
1.“鸭子”抽象类,定义行为接口、显示鸭子外貌的抽象方法、设置行为接口(作用,可以动态改变行为接口实现某些需求)
将行为交给“鸭子”子类实现。
public abstract class Duck { FlyBehavior mFlayBehavior; //声明行为接口 QuackBehavior mQuackBehavior; public abstract void display(); public void performFly(){ mFlayBehavior.fly(); //xxx.xx()由实现行为的子类实现 } public void performQuack(){ mQuackBehavior.quack(); } public void setFlyBehavior(FlyBehavior fb){ this.mFlayBehavior = fb; } public void setQuackBehavior(QuackBehavior qb){ this.mQuackBehavior= qb; } }
2.行为接口(eg.)
public interface FlyBehavior { public void fly(); }
3.实现行为接口(eg.)
public class FlyWithWings implements FlyBehavior { public void fly(){ Log.d(TAG,"用翅膀飞");//具体实现 } }
- 实现“鸭子”子类
public class NormalDuck extends Duck{ public NormalDuck (){ mFlayBehavior = new FlyWithWings(); //这里要写该鸭子默认的飞行行为,直接实例化行为就可以啦亲。 //一开始不用setXXX行为咯,留到有需要动态改变的时候改,鸭子吃起来口味更佳?~ mQuackBehavior= new Quack(); } public void display(){ Log.d(TAG,"我是一只白白的鸭子"); } }
5.测试咯
public class test(){ public void gogogogo(){ Duck normalDuck = new NormalDuck(); normalDuck.performFly(); normalDuck.performQuack(); //如无意外,这里就可以搞定了,可是(`・ω・´) //哎呀需求来了,这时候不要鸭子飞了,怎么办(╥╯^╰╥) //这时候,set就派上用场了ヾ(๑╹◡╹)ノ" //通过设置“飞”的行为来改变 normalDuck.setFlyBehavior(new FlyNoWay); //然后,执行“不飞”的操作 normalDuck.performFly(); //成功改变行为啦,不用和产品撕逼了有木有? } }
动手敲一遍,很容易就学会啦~
既然看到了这里,不妨再顺便看看设计原则:
HEAD FIRST大师说的设计原则:
1.封装变化
2.多用组合,少用继承
3.针对接口编程,不针对实现编程
大师还说,学了一个,后面还有N个,开不开心,激不激动?学完了再看各类源码无压力了你信不?
阅读全文
0 0
- 设计模式学习笔记(一):策略模式
- 设计模式学习笔记(一):策略模式
- 设计模式学习笔记(一)--策略模式
- 设计模式学习(一)策略模式
- 设计模式学习(一)、策略模式
- 【Java23种设计模式学习笔记】一:策略模式
- 策略设计模式--学习笔记
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记:策略模式
- 设计模式学习笔记--策略(Strategy)模式
- 设计模式学习笔记七:策略模式
- 设计模式学习笔记--策略模式
- 设计模式学习笔记-策略模式
- 设计模式学习笔记—策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记之策略模式
- 大话设计模式学习笔记---策略模式
- 多线程下载
- Java eclipse 编码(乱码)问题
- Word组件Spire.Doc6.0.52 发布| 修复转PDF文本重叠的问题
- Kubernetes对象(网络)之Ingress
- MongoDB复制集的概念
- 设计模式学习笔记(一)--策略模式
- MongoDB 聚合
- mongo快速搭建复制集
- Unity中实现放大镜的功能
- spring mvc
- MongoDB 管道的概念
- RC4加密解密实现
- 阿里云使用笔记(一):从零开始配置阿里云GPU服务器训练深度学习模型
- Hive语法详解