通常情况一台电视机配置一种对应的遥控器,但是这种情况下,每当有一种新的电视机后,就不得不增加一种新的遥控器。因为电视机模块在变化,遥控器模块中控制逻辑相对文档。
现在引入Java设计模式中的桥接模式,解决这种情况。
public interface TV {
void on();
void off();
void setChannel(int number);
}
/**
* 遥控器抽象。
*/
public abstract class RemoteControl {
private TV tv;
public RemoteControl(){
}
public RemoteControl(TV tv) {
this.tv = tv;
}
public void setTv(TV tv) {
this.tv = tv;
}
public void on() {
tv.on();
}
public void off() {
tv.off();
}
public void setChannel(int number) {
tv.setChannel(number);
}
}
遥控器的抽象实现:
public class SomeRemoteControl extends RemoteControl{
public SomeRemoteControl() {
super();
}
}
一种叫做CH的电视机:
public class CHTV implements TV {
private String name = "CH牌电视机";
@Override
public void on() {
System.out.println(name + " 打开");
}
@Override
public void off() {
System.out.println(name + " 关闭");
}
@Override
public void setChannel(int number) {
System.out.println(name + " 切换频道" + number);
}
}
一种叫做ZP的电视机:
public class ZPTV implements TV{
private String name="ZP牌电视机";
@Override
public void on() {
System.out.println(name+" 打开");
}
@Override
public void off() {
System.out.println(name+" 关闭");
}
@Override
public void setChannel(int number) {
System.out.println(name+" 切换频道"+number);
}
}
测试:
RemoteControl control = new SomeRemoteControl();
TV chTv = new CHTV();
control.setTv(chTv);
control.on();
control.setChannel(1);
control.off();
ZPTV zptv = new ZPTV();
control.setTv(zptv);
control.on();
control.setChannel(2);
control.off();
输出:
CH牌电视机 打开
CH牌电视机 切换频道1
CH牌电视机 关闭
ZP牌电视机 打开
ZP牌电视机 切换频道2
ZP牌电视机 关闭