美文网首页
策略模式

策略模式

作者: 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