美文网首页
策略模式

策略模式

作者: xandone | 来源:发表于2016-09-02 15:10 被阅读59次

    策略模式,多用组合,少用继承


    将需要变化的部分隔离出来,不要与不需要变化的混在一起

    eg:某一个行为(吃瓜),不同的子类实现不同的吃瓜方式

    方式一,直接继承父类:

    父类(人),吃瓜waterMelon();

    由于每个人的吃相不一样,分别override吃瓜的方法,这样一来,需要重写的方法太多

    子类1重写吃瓜方法waterMelon(){

    吃瓜方法1

    };

    子类2重写吃瓜方法waterMelon(){

    吃瓜方法3

    };

    子类3重写吃瓜方法waterMelon(){

    吃瓜方法3

    };

    另一方面,还有一个弊端,有的人吃瓜过敏,但是同样要继承父类的吃瓜行为,然而他不能吃瓜,形成bug隐患


    方式二,提出接口:

    父类(人),吃瓜waterMelon();

    提出waterMelon()作为接口WaterMelon的方法,有吃瓜爱好的人实现该接口,过敏者不实现

    子类1实现吃瓜方法waterMelon(){

    吃瓜方法1

    };

    子类2实现吃瓜方法waterMelon(){

    吃瓜方法2

    };

    子类3不实现该接口

    这样写会减少很多代码,也使得继承结构更有逻辑性

    但是,仍然存在弊端:

    假如现在有100个人,其中有80人的吃瓜方式一样,于是,必须写80个waterMelon()相同的方法(实现接口必须重写方法),

    造成代码的严重重复


    方式三,提出吃瓜行为的接口WaterMelon,提出不同吃瓜方法的实现类

    WaterMelon_1 implements WaterMelon{

    waterMelon(){

    吃瓜方法1

    }

    }

    WaterMelon_2 implements WaterMelon{

    waterMelon(){

    吃瓜方法2

    }

    }

    WaterMelon_3 implements WaterMelon{

    waterMelon(){

    不吃瓜

    }

    }

    1.将WaterMelon w 作为父类的成员变量,

    2.子类根据不同的需求进行初始化,eg:WaterMelon w=new WaterMelon_2()

    3.执行waterMelon()方法,w.waterMelon()

    这样只用根据吃瓜方式的不同撰写几个实现类即可

    相关文章

      网友评论

          本文标题:策略模式

          本文链接:https://www.haomeiwen.com/subject/qiahettx.html