场景,我们需要给不同的电视厂商,比如长虹、TCL、三星等等生产电视遥控器。他们提供各自电视机遥控功能的实现,并且遵循一样的标准。
我们制作一个长虹的遥控器,选择最直接的方式,继承长虹类,然后利用长虹类提供的方法,实现遥控器功能。
在这个遥控器中,我们提供了新功能,比如
1)将开和关放在一个按钮
2)下一个频道
3)上一个频道
public class CHTvControl extends CHControl implements TvControl{
private static int ch=0;
private static boolean ison=false;
public void Onoff()
{
if(ison)
{
ison=false;
super.Off();
}else{
ison=true;
super.On();
}
}
public void nextChannel()
{
ch++;
super.setChannel(ch);
}
public void preChannel()
{
ch--;
if(ch<0)
{
ch=200;
}
super.setChannel(ch);
}
}
恰好,这个遥控器方案跟海尔要求的也一样。按照这种继承的方案,虽然功能一样,可是还是不得不继承海尔Control,写几乎一模一样的实现类。
慢慢这个生产遥控器的生意越来越红火,连三星和TCL也让我们生产他们的遥控器了。但是他们有新需求,TCL要新功能A、B、C,三星需要新功能A、B、D。没过多久,海尔跟TCL也要求有A、B、C功能的遥控器。
感觉不对劲,好像做的好多重复开发。这个狗血的故事,兜了那么远,主角终于出场了...
通过桥接模式,能否更好的解决这个问题呢?
思路:
不用继承,改用持有。