java桥接模式_Java设计模式,桥接模式

本文解析了桥接模式如何通过将抽象和实现分离,解决继承层级问题,实现子类行为的灵活扩展。通过实例展示了如何在代码中运用此模式,以及它在避免代码冗余和多维度解耦中的作用。实操案例和客户端代码演示了模式的实际价值。
摘要由CSDN通过智能技术生成

定义将抽象部分与其实现部分分离,使它们能够独立地进行变化。

桥接模式解决的问题就是实现与抽象之间的静态继成问题,当继承层次变得庞大时,这种问题尤其严重。“桥接”正是连接抽象部分与实现部分的桥梁,一定程度上减少子类的冗余,实现多维度解耦。

实现

通常,一个简单的继承的例子如下:

public interface Bird {

void sing();

}

public class Sparrow implements Bird {

@Override

public void sing() {

System.out.println("sparrow sing");

}

}

public class Magpie extends Sparrow {

@Override

public void sing() {

super.sing();

}

}

这段代码看起来没有明显的困难,如果具体实现部分能够动态地扩展其方法,那岂不是更好,于是:

public interface Bird {

}

public abstract class Bridge {

public abstract void sing();

public abstract void fly();

}

public class AbsBird implements Bird {

protected Bridge bridge;

public AbsBird(Bridge bridge) {

this.bridge = bridge;

}

public Bridge getBridge() {

return bridge;

}

protected void sing() {

bridge.sing();

}

}

public class Sparrow extends AbsBird {

public Sparrow(Bridge bridge) {

super(bridge);

}

@Override

protected void sing() {

super.sing();

}

}

public class Magpie extends Sparrow {

public Magpie(Bridge bridge) {

super(bridge);

}

@Override

protected void sing() {

super.sing();

bridge.fly();

}

}

以上的 sing 方法调用了 Bridge 的 fly 方法,可动态扩展子类的行为。有盆友可能会问,直接在子类里实现具体的逻辑不就可以了。

那么,如果多个子类都需要实现这一段逻辑,且存在部分子类不需要实现这段逻辑的情况,直接在子类中直接实现逻辑就会导致相同的代码大量冗余。

来看看具体的客户端代码使用这种模式的妙处:

```public class Client {

public static void main(String[] args) {

Magpie m = new Magpie(new Bridge() {

@Override

public void sing() {

System.out.println("sing...");

}

@Override

public void fly() {

System.out.println("fly...");

}

});

m.sing();

Sparrow s = new Sparrow(new Bridge() {

@Override

public void sing() {

System.out.println("super sing");

}

@Override

public void fly() {

System.out.println("super fly");

}

});

s.sing();

}

} ```

总结

桥接模式是一种非常巧妙的设计模式,它的优点显而易见,但是真正能够利用桥接模式达到优点最大化,还是需要不断地应用于实际项目,利用实际经验设计好桥接模式在业务中的使用。

本文由 知我者乎 原创,未经许可,不得转载!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值