设计模式-桥接模式

一个抽象会有多个实现,我们会用继承来协调他们。继承机制将抽象部分与具体实现固定在一起,使得抽象部分和实现部分难以独立地进行修改。

比如我们的系统需要做一个窗口,那么要实现这个窗口的绘制,可能这个版本的窗口需要绘制边框,另一个版本不需要,但是这边框和线条分为window下的和mac下的,

那么这个边框和线条我们需要独立出来,采用桥接的方式去实现,而这个独立出来的接口就是桥。

窗口类

窗口类中维护了一个DrawToolImpl类接口的对象,这个对象正是所谓的桥。 

public abstract class Window {
    protected DrawToolImpl drawTool;
    public Window(DrawToolImpl drawTool){
        this.drawTool = drawTool;
    }
    public abstract void drawWindow();
}
这个桥是我们定义的接口,具体靠子类来实现
public interface DrawToolImpl {
    void drawLine();
    void drawBorder();
}
第一个版本的窗口我们画了边框和线
public class OneWindow extends Window{

    public OneWindow(DrawToolImpl drawTool) {
        super(drawTool);
    }

    public void drawWindow() {
        this.drawTool.drawBorder();
        this.drawTool.drawLine();
    }
}
//第二个版本只画了边框
public class TwoWindow extends Window{

    public TwoWindow(DrawToolImpl drawTool) {
        super(drawTool);
    }

    public void drawWindow() {
        this.drawTool.drawBorder();
    }
}
而画笔工具分为windows下的和mac下的
public class WinDrawToolImpl implements DrawToolImpl{
    public void drawLine() {
        System.out.println("windows下的线");
    }

    public void drawBorder() {
        System.out.println("windows下的边框");
    }
}
public class MacDrawToolImpl implements DrawToolImpl{
    public void drawLine() {
        System.out.println("mac下的线");
    }

    public void drawBorder() {
        System.out.println("mac下的边框");
    }
}
这样的桥接方式,我们在画窗口时不需要去管具体是哪个系统下的画笔工具。
实现结果
public class Cilent {
    public static void main(String[] args){
        Window window = new OneWindow(new WinDrawToolImpl());
        window.drawWindow();
    }
}
windows下的边框
windows下的线

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值