将抽象和实现解耦,使得两者可以独立地变化。
四个角色
抽象化(Abstraction)角色
该角色抽象化的给出定义,并保存一个对实现化对象的引用。
/**
* 抽象图形
* <p>
* 抽象化(Abstraction)角色
* 该角色抽象化的给出定义,并保存一个对实现化对象的引用。
*
* @author Jenson
*/
public abstract class AbstractShape {
Color color;
public AbstractShape(Color color) {
this.color = color;
}
/**
* 绘制图形
*/
public abstract void draw();
}
实现化(Implementor)角色
该角色给出实现化角色的接口,但不给出具体的实现。
/**
* 颜色接口
* <p>
* 实现化(Implementor)角色
* 该角色给出实现化角色的接口,但不给出具体的实现。
*
* @author Jenson
*/
public interface Color {
/**
* 获取颜色
*
* @return 颜色
*/
String getColor();
}
修正抽象化(RefinedAbstraction)角色
该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正。
/**
* 圆形
* <p>
* 修正抽象化(RefinedAbstraction)角色
* 该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正。
*
* @author Jenson
*/
public class Circle extends AbstractShape {
public Circle(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("使用 " + color.getColor() + " 绘制圆形");
}
}
/**
* 正方形
* <p>
* 修正抽象化(RefinedAbstraction)角色
* 该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正。
*
* @author Jenson
*/
public class Square extends AbstractShape {
public Square(Color color) {
super(color);
}
@Override
public void draw() {
System.out.println("使用 " + color.getColor() + " 绘制正方形");
}
}
具体实现化(ConcreteImplementor)角色
该角色对实现化角色接口中的方法进行具体实现。
/**
* 绿色
* <p>
* 具体实现化(ConcreteImplementor)角色
* 该角色对实现化角色接口中的方法进行具体实现。
*
* @author Jenson
*/
public class Green implements Color {
public String getColor() {
return "绿色";
}
}
/**
* 红色
* <p>
* 具体实现化(ConcreteImplementor)角色
* 该角色对实现化角色接口中的方法进行具体实现。
*
* @author Jenson
*/
public class Red implements Color {
public String getColor() {
return "红色";
}
}
调用
/**
* 桥梁模式实现
* 桥接模式 的核心在于 解耦抽象和实现
*
* @author Jenson
*/
public class BridgeMain {
public static void main(String[] args) {
// 实现颜色和形状的自由结合
Color green = new Green();
Color red = new Red();
// 绿色圆形
AbstractShape greenCircle = new Circle(green);
greenCircle.draw();
// 绿色方形
AbstractShape greenSquare = new Square(green);
greenSquare.draw();
//红色圆形
AbstractShape redCircle = new Circle(red);
redCircle.draw();
//红色方形
AbstractShape redSquare = new Square(red);
redSquare.draw();
}
}
网友评论