设计模式之桥接模式

桥接模式是解决系统耦合,和解决多维关系。实现多个抽象和实现之间的能够优雅实现的一种进阶设计模式,更多的时候被人称为结构型设计模式。

一、应用场景

有时候,更多的系统底层设计,我们需要定义好基础的类和开发能够处理很多有特性的实现。对外提供简单的接口,例如安卓的窗口管理,JDBC驱动程序等

应用原则:

  • 如果一个系统需要在构建的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,可以通过桥接模式使他们在抽象层建立一个关联关系;
  • 那些不希望使用继承或因为多层次继承导致系统类的个数极具增加的系统;
  • 一个类存在两个独立变化的维度,而这两个维度都需要进行扩展。

二、实现原理

桥接模式也分为四个角色:

Abstraction:抽象部分
该类保持一个对实现部分对象的引用,抽象部分中的方法需要调用实现部分的对象来实现,该类一般为抽象类;
RefinedAbstraction:优化的抽象部分
抽象部分的具体实现,该类一般对抽象部分的方法进行完善和扩展;
Implementor:实现部分
可以为接口或者是抽象类,其方法不一定要与抽象部分中的一致,一般情况下是由实现部分提供基本的操作,而抽象部分定义的则是基于实现部分基本操作的业务方法;
ConcreteImplementorA 和 ConcreteImplementorB :实现部分的具体实现、完善实现部分中定义的具体逻辑。

总之,这是一个将复杂关系的系统关系,通过抽象的关联,并将具体的实现带入到抽象当中实现的一种设计模式,好比一个小吃店,我带了一份猪耳朵去吃了一个午饭,别人带了一个馒头去吃了一个晚饭。结果我的都吃饱了,都满足了吃饭的要求。

三、具体实现

 // 实现的接口
    public interface Implementor {
        void operationImpl();
    }
    // 抽象部分
    public abstract class Abstraction {
        private Implementor implementor;

        public Abstraction(Implementor implementor) {
            this.implementor = implementor;
        }

        public void operation() {
            implementor.operationImpl();
        }
    }
    // 抽象的实现
    public static class RefinedAbstraction extends Abstraction{
        public RefinedAbstraction(Implementor implementor) {
            super(implementor);
        }

        public void refinedOperation() {
            //对 Abstraction 中的 operation 方法进行扩展
        }
    }
    // 实现部分
    public static class ConcreteImplementorA implements Implementor{
        @Override
        public void operationImpl() {
            //具体实现
        }
    }
    public static class ConcreteImplementorB implements Implementor{

        @Override
        public void operationImpl() {
            //具体实现
        }
    }

    public static void main(String[] args){
        // refinedAbstractionA的实现
        RefinedAbstraction refinedAbstractionA = new RefinedAbstraction(new ConcreteImplementorA());
        refinedAbstractionA.refinedOperation();
        // refinedAbstractionB的实现
        RefinedAbstraction refinedAbstractionB = new RefinedAbstraction(new ConcreteImplementorB());
        refinedAbstractionB.refinedOperation();
    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值