23中常用设计模式之桥接模式

说明

桥接模式是将抽象部分与它的实现部分分离,使它们都可以独立地变化。它是一种结构型模式,又称为柄体(Handle and Body)模式或接口(Interfce)模式。
一个事物我们可以从不同的维度去描述它,在众多维度中我们需要确定一个主维度,即其他副维度是描述主维度的。在桥接模式中,我们需要将主维度抽象化,副维度接口化,使他们能够独立的变化。
举栗说明:

扩展\维度 形状 颜色
扩展一 正方形 白色
扩展二 圆形 黑色

很显然,这两个维度有四种组合,即:
白色正方形
黑色正方形
白色圆形
黑色圆形

模式特征

角色 说明 举栗
抽象化(Abstraction) 抽象化给出的定义,并保存至少一个对实现化对象的引用 Shape
修正抽象化(Refined Abstraction) 扩展抽象化角色,改变和修正父类对抽象化的定义 Square、Circle
实现化(Implementor) 这个角色给出实现化角色的接口 Color
具体实现化(Concrete Implementor) 这个角色给出实现化角色接口的具体实现 White、Black

UML

桥接模式类图

代码实现

  • 抽象化角色:形状
public abstract class Shape {
    protected Color color;

    public Shape(Color color){
        this.color =color;
    }
	//抽象方法,用于子类实现
    public abstract void info();
}
  • 修正抽象化角色:正方形
public class Square extends Shape {

    public Square(Color color) {
        super(color);
    }

    @Override
    public void info() {
        System.out.println(super.color.color() + "正方形");
    }
}
  • 修正抽象化角色:圆形
public class Circle extends Shape {

    public Circle(Color color) {
        super(color);
    }

    @Override
    public void info() {
        System.out.println(super.color.color() + "圆形");
    }
}
  • 实现化角色
public interface Color {
    String color();
}
  • 具体实现化角色:白色
public class White implements Color {
    @Override
    public String color() {
        return "白色";
    }
}
  • 具体实现化角色:黑色
public class Black implements Color {
    @Override
    public String color() {
        return "黑色";
    }
}
  • 客户端测试类
public class Client {
    public static void main(String[] args) {
        Shape circle = new Circle(new Black());
        circle.info();

        Shape circle1 = new Circle(new White());
        circle1.info();

        Shape square = new Square(new Black());
        square.info();

        Shape square1 = new Square(new White());
        square1.info();
    }
}

优缺点

优点
  • 抽象和实现分离
  • 易于扩展
缺点
  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程
原创文章 67 获赞 31 访问量 5万+

猜你喜欢

转载自blog.csdn.net/u012534326/article/details/102539840