设计模式(六)桥接模式

参考:
https://www.cnblogs.com/V1haoge/p/6497919.html

http://blog.csdn.net/xiefangjin/article/details/51056411

1.桥接模式

    桥接是一个接口,它与一方应该是绑定的,也就是解耦的双方中的一方必然是继承这个接口的,这一方就是实现方,而另一方正是要与这一方解耦的抽象方,如果不采用桥接模式,一般我们的处理方式是直接使用继承来实现,这样双方之间处于强链接,类之间关联性极强,如要进行扩展,必然导致类结构急剧膨胀。采用桥接模式,正是为了避免这一情况的发生,将一方与桥绑定,即实现桥接口,另一方在抽象类中调用桥接口(指向的实现类),这样桥方可以通过实现桥接口进行单方面扩展,而另一方可以继承抽象类而单方面扩展,而之间的调用就从桥接口来作为突破口,不会受到双方扩展的任何影响。 

//申明桥
public interface Qiao {
     //目的地B
     void targetAreaB();
}


/**
 * 目的地B1
 */
public class AreaB1 implements Qiao {
    @Override
    public void targetAreaB() {
        System.out.println("我要去B1");
    }
}

/**
 * 目的地B2
 */
public class AreaB2 implements Qiao {
    @Override
    public void targetAreaB() {
        System.out.println("我要去B2");
    }
}





//来源地(桥的另一端)
public abstract class AreaA {
    //这里引用桥接口
    Qiao qiao;
    //来源地
    abstract void fromAreaA();
}

/**
 * 来源地A1
 */
public class AreaA1 extends AreaA {
    @Override
    void fromAreaA() {
        System.out.println("我来自A1");
    }  
}

/**
 * 来源地A2
 */
public class AreaA2 extends AreaA {
    @Override
    void fromAreaA() {
        System.out.println("我来自A2");
    }
}

//----------------------------------------------------//
public class Clienter {
    public static void main(String[] args) {
        AreaA a = new AreaA2();
        a.qiao = new AreaB2();
        a.fromAreaA();
        a.qiao.targetAreaB();
    }
}

2.和适配器模式比较

共同点

桥接和适配器都是让两个东西配合工作

不同点

出发点不同。
         1)适配器:改变已有的两个接口,让他们相容。
         2)桥接模式:分离抽象化和实现,使两者的接口可以不同,目的是分离。

        所以说,如果你拿到两个已有模块,想让他们同时工作,那么你使用的适配器。
        如果你还什么都没有,但是想分开实现,那么桥接是一个选择。

        桥接是先有桥,才有两端的东西
        适配是先有两边的东西,才有适配器

        桥接是在桥好了之后,两边的东西还可以变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值