为了账号安全,请及时绑定邮箱和手机立即绑定

Android 桥接模式

标签:
Android

一、前言

Android桥接(Bridge)模式,又被称为桥梁模式。结构型模式之一。我们知道桥梁起到连接两岸的作用,而桥接模式的作用和这十分类似,就是连接抽象部分和实现部分。起到解耦的作用。

二、定义

将抽象部分与实现部分分离,使它们都可以独立的进行变化。

三、例子

理论部分还是比较抽象,下面我举一个例子来说明什么是桥接模式,并在其中说明桥接模式的核心。例子是我们要给圆、正方形和长方形添加白色或黑色。

3.1、实现部分

我们实现出添加颜色,所以称之为实现部分,这里可以用接口,也可以用抽象类。笔者使用接口

public interface Color {    public void coloring();
}public class White implements Color {    private static final String TAG = White.class.getSimpleName();    @Override
    public void coloring() {
        Log.d(TAG,"模拟正在涂上白色...");
    }
}public class Black implements Color {    private static final String TAG = Black.class.getSimpleName();    @Override
    public void coloring() {
        Log.d(TAG,"模拟正在涂上黑色...");
    }
}

这里说下为啥要写两个具体的类来表示白色或黑色,而不是写成一个类,既可以画白色也可以画黑色。首先:不要和安卓原生的Color类混淆。其次:这里主要是对白色或黑色进行一个抽象,假如你把它想成颜料,它们是具体的一个类。最后:如果二者写在一起,也等于多写了一个类来包含黑色和白色这两个类。

3.2、抽象部分

抽象出具体的事物:图形,并秒回具体的图形。此部分一般使用抽象类。

public abstract class Shape {    protected Color color;    public Shape(Color color) {        this.color = color;
    }    public abstract void draw();
}

正方形

public class Square extends Shape {    private static final String TAG = Square.class.getSimpleName();    public Square(Color color) {        super(color);
    }    @Override
    public void draw() {
        Log.d(TAG,"模拟正在画正方形...");
        color.coloring();
    }
}

长方形

public class Rectangle extends Shape {    private static final String TAG = Rectangle.class.getSimpleName();    public Rectangle(Color color) {        super(color);
    }    @Override
    public void draw() {
        Log.d(TAG,"模拟正在画长方形...");
        color.coloring();
    }
}

圆形

public class Circular extends Shape {    private static final String TAG = Circular.class.getSimpleName();    public Circular(Color color) {        super(color);
    }    @Override
    public void draw() {
        Log.d(TAG,"模拟正在画圆形...");
        color.coloring();
    }
}

桥接模式小结说明:
1、抽象和实现部分的区分
实现部分主要是对抽象化的事物进一步的具体化。这里就是对抽象化的图形进一步添加颜色。
2、桥接模式结构核心
抽象部分拥有实现部分实例,并调用实现部分实例的方法。
由以上构成桥接模式。
3、减少类的个数利于扩展,并且解耦。
首先有正方形、长方形和圆形,你还可以添加更多的图形。颜色也可以添加更多的颜色。我们把图形看成一个维度,颜色看成一个维度。如果不用桥接模式,你可能像下面这样写。你不单要为白色添加一个类,还得为黑色添加一个类。如果有更多的颜色。将成倍增长。桥接模式就分离这两个维度,使这两个维度独立。达到减少类的个数和解耦的作用。

public class Square extends Shape implements Color

3.3、调用

White white = new White();
Black black = new Black();

Square square = new Square(white);
Rectangle rectangle = new Rectangle(black);
Circular circular = new Circular(white);

square.draw();
rectangle.draw();
circular.draw();

输出

02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Square: 模拟正在画正方形...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/White: 模拟正在涂上白色...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Rectangle: 模拟正在画长方形...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Black: 模拟正在涂上黑色...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/Circular: 模拟正在画圆形...
02-23 10:01:19.999 17899-17899/com.yink.designpattern.designpattern D/White: 模拟正在涂上白色...

四、写在最后

1、桥接模式将抽象部分和实现部分分离,解耦
2、两个维度,独立变化
3、灵活的扩展,透明实现



作者:Yink_Liu
链接:https://www.jianshu.com/p/5ac2805a1df4


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消