策略模式,多用组合,少用继承
将需要变化的部分隔离出来,不要与不需要变化的混在一起
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()
这样只用根据吃瓜方式的不同撰写几个实现类即可