在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。将颜色和形状两两结合的方式成为桥接。
可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。
1. 模式的结构
桥接(Bridge)模式包含以下主要角色。
抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。
举例:我们画不同颜色的形状
//首先是形状类和颜色的抽象类
//该类为一个抽象类,主要提供画形状的方法
public abstract class Shape {
Color color;//形状里要有颜色的实例
public void setColor(Color color) {
this.color = color;
}
public abstract void draw();
}
//颜色类
public interface Color {
public void bepaint(String shape);
}
//------------------------------------------------
//具体形状的实现:圆形
public class Circle extends Shape{
public void draw() {
color.bepaint("圆形");
}
}
//具体形状的实现:长方形
public class Rectangle extends Shape{
public void draw() {
color.bepaint("长方形");
}
}
//具体形状的实现:正方形
public class Square extends Shape{
public void draw() {
color.bepaint("正方形");
}
}
//具体颜色的实现:黑色
public class Black implements Color{
public void bepaint(String shape) {
System.out.println("黑色的" + shape);
}
}
//具体颜色的实现:灰色
public class Gray implements Color{
public void bepaint(String shape) {
System.out.println("灰色的" + shape);
}
}
//具体颜色的实现:白色
public class White implements Color{
public void bepaint(String shape) {
System.out.println("白色的" + shape);
}
}
//测试
public static void main(String[] args) {
//白色
Color white = new White();
//正方形
Shape square = new Square();
//白色的正方形
square.setColor(white);
square.draw();
//长方形
Shape rectange = new Rectangle();
rectange.setColor(white);
rectange.draw();
}
运行结果
原文:https://www.cnblogs.com/love-xk/p/13175006.html