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

来源:互联网 发布:区域合并算法 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,"用翅膀飞");//具体实现        }    }
  1. 实现“鸭子”子类
    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个,开不开心,激不激动?学完了再看各类源码无压力了你信不?

原创粉丝点击