标签:
场景,我们需要给不同的电视厂商,比如长虹、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功能的遥控器。
感觉不对劲,好像做的好多重复开发。这个狗血的故事,兜了那么远,主角终于出场了...
通过桥接模式,能否更好的解决这个问题呢?
思路:
不用继承,改用持有。
标签:
原文地址:http://my.oschina.net/gaohongtian/blog/491584