您的位置:首页 > 编程语言 > Java开发

Java设计模式:桥接模式

2016-04-05 09:34 453 查看
简单来讲,桥接模式是一个两层的抽象。

桥接模式是用于“把抽象和实现分开,这样它们就能独立变化”。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。


1、桥接模式的故事

电视和遥控器(如图)是一个完美展示两层抽象的例子。你有一个电视机的接口,还有一个遥控器的抽象类。我们都知道,将它们中任何一个定义为一个具体类都不是好办法,因为其它厂家会有不同的实现方法。



2、桥接模式Java示例代码

首先定义电视机的接口:ITV

public interface ITV {
public void on();
public void off();
public void switchChannel(int channel);
}


实现三星的 ITV 接口。

public class SamsungTV implements ITV {
@Override
public void on() {
System.out.println("Samsung is turned on.");
}

@Override
public void off() {
System.out.println("Samsung is turned off.");
}

@Override
public void switchChannel(int channel) {
System.out.println("Samsung: channel - " + channel);
}
}


再实现索尼的ITV接口。

public class SonyTV implements ITV {

@Override
public void on() {
System.out.println("Sony is turned on.");
}

@Override
public void off() {
System.out.println("Sony is turned off.");
}

@Override
public void switchChannel(int channel) {
System.out.println("Sony: channel - " + channel);
}
}


遥控器要包含对TV的引用。

public abstract class AbstractRemoteControl {
/**
* @uml.property  name="tv"
* @uml.associationEnd
*/
private ITV tv;

public AbstractRemoteControl(ITV tv){
this.tv = tv;
}

public void turnOn(){
tv.on();
}

public void turnOff(){
tv.off();
}

public void setChannel(int channel){
tv.switchChannel(channel);
}
}


定义遥控器的具体类。

public class LogitechRemoteControl extends AbstractRemoteControl {

public LogitechRemoteControl(ITV tv) {
super(tv);
}

public void setChannelKeyboard(int channel){
setChannel(channel);
System.out.println("Logitech use keyword to set channel.");
}
}


public class Main {
public static void main(String[] args){
ITV tv = new SonyTV();
LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
lrc.setChannelKeyboard(100);
}
}


输出如下:

Sony: channel - 100
Logitech use keyword to set channel.


总结一下, 桥接模式允许两层实现的抽象,上面的电视机和遥控器就是很好的例子。可见,桥接模式提供了更多的灵活性。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: