桥接(Bridge)

桥接(Bridge)

桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

将抽象与实现分离开来,使它们可以独立变化。

 

介绍

意图:将抽象部分与实现部分分离,使它们都可以独立的变化。

主要解决:在有多种可能会变化的情况下,用继承会造成类爆炸问题,扩展起来不灵活。

何时使用:实现系统可能有多个角度分类,每一种角度都可能变化。

如何解决:把这种多角度分类分离出来,让它们独立变化,减少它们之间耦合。

关键代码:抽象类依赖实现类。

结构

抽象结构

实例结构

代码演示

RemoteControl <-> Abstraction。

public abstract class RemoteControl  {
    protected  TV tv;
​
    public RemoteControl(TV tv) {
        this.tv = tv;
    }
​
    public abstract  void on();
    public abstract  void off();
    public abstract  void tuneChannel();
​
}
​

TV<-> Implementor

public abstract class TV {
    public abstract void on();
​
    public abstract void off();
​
    public abstract void tuneChannel();
}
​

RedinedAbstraction <-> ConcreteRemoteControl1 ConcreteRemoteControl2

public class ConcreteRemoteControl1 extends RemoteControl {
​
    public ConcreteRemoteControl1(TV tv) {
        super(tv);
    }
​
    @Override
    public void on() {
        System.out.println("ConcreteRemoteControl1.on");
        tv.on();
    }
​
    @Override
    public void off() {
        System.out.println("ConcreteRemoteControl1.off");
        tv.off();
    }
​
    @Override
    public void tuneChannel() {
        System.out.println("ConcreteRemoteControl1.tuneChannel");
        tv.tuneChannel();
    }
}
​
public class ConcreteRemoteControl2 extends RemoteControl {
​
    public ConcreteRemoteControl2(TV tv) {
        super(tv);
    }
​
    @Override
    public void on() {
        System.out.println("ConcreteRemoteControl2.on");
        tv.on();
    }
​
    @Override
    public void off() {
        System.out.println("ConcreteRemoteControl2.off");
        tv.off();
    }
​
    @Override
    public void tuneChannel() {
        System.out.println("ConcreteRemoteControl2.tuneChannel");
        tv.tuneChannel();
    }
}
​

ConcreteLmplementor <-> SNOY RCA

public class Sony extends TV {
    @Override
    public void on() {
        System.out.println("Sony.on");
    }
​
    @Override
    public void off() {
        System.out.println("Sony.off");
​
    }
​
    @Override
    public void tuneChannel() {
        System.out.println("Sony.tuneChannel");
​
    }
}
​
public class RCA extends TV {
    @Override
    public void on() {
        System.out.println("RCA.on");
    }
​
    @Override
    public void off() {
        System.out.println("RCA.off");
​
    }
​
    @Override
    public void tuneChannel() {
        System.out.println("RCA.tuneChannel");
​
    }
}
​

测试代码

 @Test
    public void on() {
        TV snoy = new Sony();
        TV rca = new RCA();
​
       RemoteControl remoteControl1 = new ConcreteRemoteControl1(snoy);
       RemoteControl remoteControl2 = new ConcreteRemoteControl2(rca);
​
       remoteControl1.on();
       remoteControl1.off();
       remoteControl1.tuneChannel();
        remoteControl2.on();
        remoteControl2.off();
        remoteControl2.tuneChannel();
    }

 

JDK中使用

  • AWT (It provides an abstraction layer which maps onto the native OS the windowing support.)

  • JDBC

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值