设计模式-桥接模式

1.桥接模式概述

将抽象和实现分离,使它们可以独立的变化,实际上是使用组合关系来代替继承关系,将抽象和实现两个方向上的耦合降低。

桥接模式的主要角色有:

  • 抽象化角色:定义抽象化,并且包含一个对实现化对象的引用。
  • 扩展抽象化:是抽象化角色的子类,实现了业务方法。
  • 实现化对象:定义接口,供子类使用
  • 具体实现化对象:给出实现化对象的方法实现

试想这样一个场景,我们需要开发一个画图程序,要求能画各种形状,各种颜色的图形。按照传统的想法,应该定义一个Shape接口,在此基础上实现Rectengle,Circle,Triangle,然后再衍生出RedCircle,GreenCicle等等。这样一来每当有一个新图形增加时,就需要在形状和颜色两个方面同时扩展。产生类爆炸,遵循桥接模式的思想,我们可以画出如下的UML类图。

在这里插入图片描述

  • Shape:对应抽象化角色
  • Circle和Rectengle:对应具体化角色
  • Color:实现化对象
  • Green和Red:具体化对象
public abstract class Shape {
    protected Color color;

    public abstract void draw();
}

public class Circle extends Shape{
    public void setColor(Color color){
        this.color=color;
    }
    @Override
    public void draw() {
        System.out.println("画圆形");
        color.fillColor();
    }
}

public class Rectengle extends Shape{
    @Override
    public void draw() {
        System.out.println("画矩形");
        color.fillColor();
    }

    public void setColor(Color color){
        this.color=color;
    }
}
public interface Color {

    public void fillColor();
}


public class Green implements Color{
    @Override
    public void fillColor() {
        System.out.println("用绿色填充!");
    }
}

public class Red implements Color{
    @Override
    public void fillColor() {
        System.out.println("用红色填充!");
    }
}

客户端测试:

public class Client {
    public static void main(String[] args) {
        Circle circle=new Circle();
        Color color=new Green();

        circle.setColor(color);
        circle.draw();

        color=new Red();
        circle.setColor(color);
        circle.draw();
        //
        画圆形
		用绿色填充!
		画圆形
		用红色填充!

    }
   
}

使用场景: 1、如果一个系统需要在构件的抽象化角色和具体化角色之间增加更多的灵活性,避免在两个层次之间建立静态的继承联系,通过桥接模式可以使它们在抽象层建立一个关联关系。 2、对于那些不希望使用继承或因为多层次继承导致系统类的个数急剧增加的系统,桥接模式尤为适用。 3、一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值