设计模式-桥接模式(bridge)

桥接模式是软件设计模式中最复杂的模式之一,它把事物对象和其具体行为、具体特征分离开来,使它们可以各自独立的变化。事物对象仅是一个抽象的概念。如“圆形”、“三角形”归于抽象的“形状”之下,而“画圆”、“画三角”归于实现行为的“画图”类之下,然后由“形状”调用“画图”。

手机都有自己的系统,一种做法是有个手机类,他又字段设备名称,以及打电话发短信等行为。伪代码如下

public abstract class phone{

    设备名字段;

    设备参数;

    打电话抽象方法()

}

系统中iphone手机和小米mix分别继承该类,并实现相关方法。但是这时候行为就与设备绑定。我们不能再iphone的手机上使用小米特有的打电话方法。然而,有种行为叫做刷机,这时候代码的维护就变得异常的困难了,这时候如果操作系统和手机分开那就完美了,这时桥接模式就体现了他的作用,桥接模式将操作系统这个抽象的东西和设备(你手上的phone手机和mix手机)桥接起来。使他成为一部完整可用的手机。


首先我们需要一个设备,这个设备兼备了所有手机的通用功能,但是手机必须有系统才能用,但是这个系统是可替换的。手机对外的功能最后又系统完成。因此代码如下。

/**
 * 设备-对象最高层级
 *
 * Created by Administrator on 2018/5/30 0030.
 */
public class Device {

    //系统
    private System product;

    protected Device(System product) {
        this.product = product;
    }

    private void email(){
        product.email();
    }

    private void internet(){
        product.internet();
    }

    private void phone(){
        product.phone();
    }

    public final void user(){
        email();
        internet();
        phone();
    }

}


各个手机品牌由又自己的系统,虽然功能是一样的, 因此系统必定是抽象的一个大概,各个厂家分别具体实现。

/**
 * 系统
 * Created by Administrator on 2018/5/30 0030.
 */
public interface System {

    public void email();
    public void internet();
    public void phone();

}


现在有个来个iphone的ios系统。

/**
 * Created by Administrator on 2018/5/30 0030.
 */
public class Iphone implements System {

    @Override
    public void email() {
        java.lang.System.out.println("iphone email..");
    }

    @Override
    public void internet() {
        java.lang.System.out.println("iphone email..");
    }

    @Override
    public void phone() {
        java.lang.System.out.println("iphone email..");
    }

}

手机必然是继承设备,因为手机是一个对象,他和系统是没什么关系。

/**
 * Created by Administrator on 2018/5/30 0030.
 */
public class Mix extends Device {

    public Mix(System product) {
        super(product);
    }

    //添加mix自己的都有功能

}

我上个星期买了mix,不过我想刷机成ios系统,好,我们来开始刷机操作。

 Device product = new Mix(new Iphone());
        product.user();

完成!就是这么简单。

如果要重新刷机成为mix自己的系统,那么只要把创建mix自己的系统类,继承System接口,然后

Device product = new Mix(new MixSyste());
        product.user();

就是这么简单,在设备完全没有任何更改情况下,我们将对象的行为变更了。

其中桥接最关键的地方就在于Device类的product字段,这个字段桥接了对象与行为的。

我们甚至可以在任何的设备上使用任何的系统,只要你讲她们桥接起来了。

因此设备与系统是可以单独变化的,它也在不影响客户端的代码情况下改变了内部实现。可以说这种集合关系将耦合降低到了最低。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值