桥接模式

简单来讲,桥接模式是一个两层的抽象。桥接模式是用于把抽象和实现脱耦,这样它们就能独立变化。 桥接模式使用了封装、聚合,可以用继承将不同的功能拆分为不同的类。

所谓的耦合,就是两个实体的某种强关联。而将它们的强关联去掉就是脱耦。强关联就是在编译期就已经确定的,无法在运行期动态改变的关联(Java继承是强关联,聚合是弱关联)。

示例代码:

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

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

实现海尔的ITV接口:

public class HaierTV implements ITV {
    @Override
    public void on() {
        System.out.println("Haier is turned on.");
    }
 
    @Override
    public void off() {
        System.out.println("Haier is turned off.");
    }
 
    @Override
    public void switchChannel(int channel) {
        System.out.println("Haier: channel - " + channel);
    }
}

再实现TCL的ITV接口:

public class TCLTV implements ITV {
 
    @Override
    public void on() {
        System.out.println("TCL is turned on.");
    }
 
    @Override
    public void off() {
        System.out.println("TCL is turned off.");
    }
 
    @Override
    public void switchChannel(int channel) {
        System.out.println("TCL: channel - " + channel);
    }
}

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

public abstract class AbstractRemoteControl {
    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 TCLTV();
        LogitechRemoteControl lrc = new LogitechRemoteControl(tv);
        lrc.setChannelKeyboard(100);    
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值