设计模式之桥接模式(Bridge)
桥模式更倾向于组合而不是继承。实现细节从层次结构推送到具有单独层次结构的另一个对象。
场景
有几种图形(正方形、长方形、圆形),为每种图形具有3种不同的颜色(红、黄、蓝),现需要把图形和颜色组合,可以画出3*3=9种图形,有两种方案
方案一:为每种形状都提供各种颜色的版本。
方案二:根据实际需要对颜色和形状进行组合。
图形接口
public interface Shape {
void apply();
}
颜色接口
public interface Color {
void colour();
}
蓝色
public class Blue implements Color {
@Override
public void colour() {
System.out.print("蓝色的");
}
}
红色
public class Red implements Color {
@Override
public void colour() {
System.out.print("红色的");
}
}
黄色
public class Yellow implements Color {
@Override
public void colour() {
System.out.print("黄色的");
}
}
圆形
public class Circle implements Shape {
private final Color color;
public Circle(Color color) {
this.color = color;
}
@Override
public void apply() {
this.color.colour();
System.out.println("圆做轮子");
}
}
正方形
public class Square implements Shape{
private final Color color;
public Square(Color color) {
this.color = color;
}
@Override
public void apply() {
color.colour();
System.out.println("正方形做桌子");
}
}
长方形
public class Rectangle implements Shape{
private final Color color;
public Rectangle(Color color) {
this.color = color;
}
@Override
public void apply() {
this.color.colour();
System.out.println("长方形做门");
}
}
测试
@Test
public void circle(){
Color red = new Red();
Shape circle = new Circle(red);
circle.apply();
new Rectangle(new Yellow()).apply();
}
注意
图形类中,使用final修饰,可避免出错,《effective java》中的原则
类图