您的位置:首页 > 其它

设计模式学习笔记(一)--策略模式

2017-11-22 11:31 211 查看
最近学习了Head First设计模式,获益良多,特写笔记记录备忘ヾ(๑╹◡╹)ノ”

这边书通俗易懂,强推~ヾ(◍°∇°◍)ノ゙

(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个,开不开心,激不激动?学完了再看各类源码无压力了你信不?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式