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

优缺点

优点
  • 抽象和实现分离
  • 易于扩展
缺点
  • 桥接模式的引入会增加系统的理解与设计难度,由于聚合关联关系建立在抽象层,要求开发者针对抽象进行设计与编程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值