android 桥接,Android 桥接模式
一、前言Android桥接(Bridge)模式,又被称为桥梁模式。结构型模式之一。我们知道桥梁起到连接两岸的作用,而桥接模式的作用和这十分类似,就是连接抽象部分和实现部分。起到解耦的作用。二、定义将抽象部分与实现部分分离,使它们都可以独立的进行变化。三、例子理论部分还是比较抽象,下面我举一个例子来说明什么是桥接模式,并在其中说明桥接模式的核心。例子是我们要给圆、正方形和长方形添加白色或黑色。3.1
一、前言
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
更多推荐
所有评论(0)