设计模式学习笔记(一)--策略模式
2017-11-22 11:31
211 查看
最近学习了Head First设计模式,获益良多,特写笔记记录备忘ヾ(๑╹◡╹)ノ”
这边书通俗易懂,强推~ヾ(◍°∇°◍)ノ゙
(PS:由于书本中的例子和阐述等在网上都能找到,so,我只画重点,例如该模式的框架、涉及到的原则~勿怪勿怪~)
以下正文ヽ( ̄▽ ̄)ノ)
伪代码:
1.“鸭子”抽象类,定义行为接口、显示鸭子外貌的抽象方法、设置行为接口(作用,可以动态改变行为接口实现某些需求)
将行为交给“鸭子”子类实现。
2.行为接口(eg.)
3.实现行为接口(eg.)
实现“鸭子”子类
5.测试咯
动手敲一遍,很容易就学会啦~
既然看到了这里,不妨再顺便看看设计原则:
HEAD FIRST大师说的设计原则:
1.封装变化
2.多用组合,少用继承
3.针对接口编程,不针对实现编程
大师还说,学了一个,后面还有N个,开不开心,激不激动?学完了再看各类源码无压力了你信不?
这边书通俗易懂,强推~ヾ(◍°∇°◍)ノ゙
(PS:由于书本中的例子和阐述等在网上都能找到,so,我只画重点,例如该模式的框架、涉及到的原则~勿怪勿怪~)
以下正文ヽ( ̄▽ ̄)ノ)
策略模式
简要概括:书本以“鸭子”这个对象为例,在对“鸭子”进行各种需求化的实例过程中,进而引出策略模式。(该鸭子的外貌特征,鸭子的行为:会叫吗,会飞吗….)伪代码:
1.“鸭子”抽象类,定义行为接口、显示鸭子外貌的抽象方法、设置行为接口(作用,可以动态改变行为接口实现某些需求)
将行为交给“鸭子”子类实现。
public abstract class Duck { /**重点start 定义了算法族,由实现接口的子类实现具体的方法**/ FlyBehavior mFlayBehavior; //声明行为接口 QuackBehavior mQuackBehavior; /**重点end**/ 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个,开不开心,激不激动?学完了再看各类源码无压力了你信不?
相关文章推荐
- js-设计模式学习笔记-策略模式
- 设计模式学习笔记(一):策略模式
- java 设计模式 学习笔记(4) 策略模式
- 《Head First 设计模式》学习笔记:策略模式与观察者模式
- 设计模式学习笔记之策略模式
- (学习笔记)设计模式之策略模式
- 二 策略模式——设计模式学习笔记
- 设计模式学习笔记---策略模式strategy pattern(Java版)
- 设计模式学习笔记(六)之策略模式(Strategy)
- 策略设计模式--学习笔记
- 设计模式学习笔记七:策略模式
- 设计模式学习笔记——策略模式
- 学习笔记——JAVA设计模式<18>策略模式
- 设计模式 学习笔记(1)简单工厂模式、策略模式
- 设计模式学习笔记——策略模式
- 设计模式学习笔记之策略模式
- 设计模式学习笔记七:策略模式
- Java-马士兵设计模式学习笔记-策略模式-模拟 Comparator接口
- 【学习笔记javascript设计模式与开发实践(策略模式)----5】
- [学习笔记]Head First 设计模式 - 策略模式(Strategy)