设计模式:桥接模式

桥接模式(Bridge Pattern)是一种结构型设计模式,它通过将抽象部分与实现部分分离,使它们可以独立变化。它旨在解决多维度变化的复杂系统,使其能够通过组合的方式扩展,而不是通过继承。

桥接模式的应用场景

  1. 避免类层次结构的膨胀:有多种可能的扩展方向,使用继承会导致大量的子类。
  2. 希望实现和抽象部分独立变化:具体的实现和抽象接口的变化频率不同。

桥接模式的结构

  • 抽象化(Abstraction):定义抽象类,并包含一个对实现部分的引用。
  • 具体抽象化(Refined Abstraction):扩展抽象类。
  • 实现化(Implementor):定义实现类接口,不一定与抽象化有相同的方法。一般来说,它提供基本操作方法,而抽象化定义基于这些基本操作的方法。
  • 具体实现化(Concrete Implementor):实现实现化接口。

代码实现

假设我们有一个图形类层次结构,其中图形可以有不同的颜色。我们将图形和颜色解耦,使它们可以独立变化。

Implementor接口
public interface Color {
    void applyColor();
}
Concrete Implementor实现
public class RedColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color.");
    }
}

public class GreenColor implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying green color.");
    }
}
Abstraction类
public abstract class Shape {
    protected Color color;

    protected Shape(Color color) {
        this.color = color;
    }

    public abstract void draw();
}
Refined Abstraction实现
public class Circle extends Shape {

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

    @Override
    public void draw() {
        System.out.print("Drawing Circle with color: ");
        color.applyColor();
    }
}

public class Square extends Shape {

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

    @Override
    public void draw() {
        System.out.print("Drawing Square with color: ");
        color.applyColor();
    }
}
使用桥接模式
public class Client {
    public static void main(String[] args) {
        Shape redCircle = new Circle(new RedColor());
        redCircle.draw();  // 输出: Drawing Circle with color: Applying red color.

        Shape greenSquare = new Square(new GreenColor());
        greenSquare.draw();  // 输出: Drawing Square with color: Applying green color.
    }
}

总结

通过桥接模式,我们将形状和颜色解耦,使得它们可以独立变化。我们可以在不改变颜色类的情况下增加新的形状,也可以在不改变形状类的情况下增加新的颜色。这种设计方式使得系统更加灵活和易于扩展。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值