一、前言

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

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐