/**
* 桥接模式:按资料说是将抽象和实现分离,这个很难理解,此处不深究定义;下面举个例子说明白
* 如果形状有长方形,正方形,圆形,颜色有红色和绿色,那么他们的组合就有3x2=6种 如果我们定义6个类去实现,那显然不合理,例如增加了一个形状,那就有4x2=8种了,
* 伪代码实现上面的方式: public class RedCircle implements Color,Shape{},这样导致2个维度的属性耦合太强了,多层继承了,
* 如果将Color维度使用组合的方式作为Shape维度的一个属性,这样就可以减少很多子类了
* 所以,出现了第二种方案,那就是将形状抽象出来,颜色抽象出来,然后颜色以组合的方式引入,这样拓展就可以让两种属性自由组合了,减少了子类的生成
*
*
*/
public abstract class Shape {
protected Color color;
public Color getColor() {
return color;
}
public void setColor(Color color) {
this.color = color;
}
protected abstract void draw();
}
public interface Color {
void paint(String shape);
}
public class Red implements Color {
@Override
public void paint(String shape) {
System.out.println("画红色的"+shape);
}
}
public class Green implements Color {
@Override
public void paint(String shape) {
System.out.println("画绿色的"+shape);
}
}
public class Circle extends Shape {
@Override
public void draw() {
color.paint("圆形");
}
}
public class Square extends Shape {
@Override
protected void draw() {
color.paint("正方形");
}
}
public class Test {
public static void main(String[] args) {
Red red = new Red();//红色
Green green = new Green();
Circle circle = new Circle();
circle.setColor(red);//画红色的圆
circle.draw();
circle.setColor(green);//画绿色的圆
circle.draw();
}
}