一、前言
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
共同学习,写下你的评论
评论加载中...
作者其他优质文章