桥接模式

/**
 * 桥接模式:按资料说是将抽象和实现分离,这个很难理解,此处不深究定义;下面举个例子说明白
 * 如果形状有长方形,正方形,圆形,颜色有红色和绿色,那么他们的组合就有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();
    }
}
原文地址:https://www.cnblogs.com/yangxiaohui227/p/10917377.html