设计模式(十)桥接模式

桥接模式的基本概念

桥接模式是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。

什么时候用桥接模式

桥接模式主要用于类继承关系的解耦上,也可用于隐藏抽象的具体细节上,当类具有多个可变元素时,我们不应将其依赖于具体的实现,而是将其依赖于抽象。
又如模板方法模式般,将不变的不变,可变的封装。
比方说我们需要一支画笔,能画出不同的形状、颜色或是更多属性,若是通过类继承来完成,类的数量也将成几何倍数的增加,而桥接模式正是把他的抽象与实现分离,只向客户端展示所关心的部分,而把其余部分抽象,通过注入持有的方式让他们结合使用。

桥接模式怎么用

在实现画笔的功能中,我选择将颜色作为实现展示给客户端,
将形状作为一个接口抽象:

/**
 * @author : cjd
 * @Description : 形状实现接口 实现具体的功能
 * @create : 2018-03-02 11:32
 **/
public interface DrawShape {
    void draw();
}

以及形状的具体实现:

/**
 * @author : cjd
 * @Description : 圆形
 * @create : 2018-03-02 11:36
 **/
public class DrawCircular implements DrawShape {
    @Override
    public void draw() {
        System.out.println("我是圆形");
    }
}

颜色作为一个桥接类,他需要持有形状并调用形状的方法:

/**
 * @author : cjd
 * @Description : 桥接类
 * @create : 2018-03-02 11:33
 **/
public abstract class Color {
    //桥接类需持有实现类的接口
    private DrawShape drawShape;

    //实现类注入与获取
    public DrawShape getDrawShape() {
        return drawShape;
    }

    public void setDrawShape(DrawShape drawShape) {
        this.drawShape = drawShape;
    }

    //交给子类实现
    public abstract void draw();

}

我们需要一种红色的画笔继承颜色:

/**
 * @author : cjd
 * @Description :
 * @create : 2018-03-02 11:41
 **/
public class Red extends Color {
    @Override
    public void draw() {
        System.out.println("我是红色");
        super.getDrawShape().draw();
    }
}

主函数这样进行调用:

/**
 * @author : cjd
 * @Description : 主函数
 * @create : 2018-03-01 13:43
 **/
public class Main {
    public static void main(String[] args) {
        Color drawRed = new Red();
        drawRed.setDrawShape(new DrawCircular());
        drawRed.draw();
    }
}

这样使用的好处在,当我们需要一个新的颜色或者新的形状时,都只需要在原有上增加一个类即可,又或者以后需要增加大小的新判定等等….极大的维护了代码的易扩展性。

后记

学习设计模式的过程中,自我感觉对设计模式的思想是在一点点的吸收的,但是却对很多设计模式之间的区别又产生了很多的疑问,可能我对某种设计模式的理解也会出很多错,可每一种设计模式都让我对整体的设计模式更深的增加了理解。
设计模式很多都是基于抽象的,这些抽象也使代码更加规划整洁易于理解,善用抽象与接口而不滥用,哪怕不懂设计模式,也是在用设计模式。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值