7、Bridge(桥接模式)

2019-05-20  本文已影响0人  我要扭开奥利奥

目的

将抽象部分和他的实现相分离,是他们都可以独立的变化。

使用场景

具体使用

假设我们是一个遥控器生产厂商,遥控器可以控制电视机。对于每一个遥控器控制器厂商来说,要是不能生产一个通用遥控器没那么就要为每一个电视重新配置一遍,那么就会很麻烦。
为了解决这个问题,我们就需要使用bridge这一个模式来减少开发的工作量。
首先我们建立一个接口,所有的电视生产公司都遵循这个接口来控制电视。

package bridge;

/**
 * 控制接口,所有的电视
 * 都需要实现这个接口里面的功能
 */
public interface Control {
    void On();
    void Off();
}

下面是每一个电视厂商自己为自己的的遥控方式做的定义,虽然接口一样,但是他们的每一的实现方法都不一样。

package bridge;

/**
 * LG电视机为自己的电视规定的遥控方式
 */
public class LGControl implements Control{
    @Override
    public void On(){
        System.out.println("LG on");
    }
    @Override
    public void Off(){
        System.out.println("LG off");
    }
}

package bridge;

/**
 * Sony为自己的电视规定的遥控方式
 */
public class SonyControl implements Control{
    @Override
    public void On(){
        System.out.println("Sony on");
    }
    @Override
    public void Off(){
        System.out.println("Sony off");
    }
}

下面就是开始为我们的遥控器厂商进行配置。
首先我们设置一个抽象类,在这个类里面我们定义控制方式。

package bridge;

/**
 * 遥控器厂商实现的抽象类
 */
public abstract class TVControlabs {
    Control tControl = null;
    public TVControlabs(Control control){
        this.tControl = control;
    }
    public abstract void OnOff();
}

这个类按照电视厂商的规定方式来控制电视,所实现的方式是使用了tControl这个对象来实现控制的。

package bridge;

public class TVControl extends TVControlabs {
    private boolean isOn = false;
    public TVControl(Control control){
        super(control);
    }

    @Override
    public void OnOff(){
        if(isOn){
            isOn = false;
            tControl.Off();
        }else{
            isOn = true;
            tControl.On();
        }
    }
}

最后是我们的测试类

package bridge;

public class Client {
    public static void main(String[] args){
        TVControl mLGContol;
        TVControl mSonyControl;
        mLGContol = new TVControl(new LGControl());
        mLGContol.OnOff();
        mLGContol.OnOff();


        mSonyControl = new TVControl(new SonyControl());
        mSonyControl.OnOff();
        mSonyControl.OnOff();
    }
}

上一篇下一篇

猜你喜欢

热点阅读