美文网首页
桥梁模式/桥接模式(Bridge Pattern)

桥梁模式/桥接模式(Bridge Pattern)

作者: 东南枝下 | 来源:发表于2020-11-01 12:57 被阅读0次

将抽象和实现解耦,使得两者可以独立地变化。

四个角色

抽象化(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();
    }
}

相关文章

网友评论

      本文标题:桥梁模式/桥接模式(Bridge Pattern)

      本文链接:https://www.haomeiwen.com/subject/ljhevktx.html