Java桥接模式

桥接模式将定义与其实现分离。 它是一种结构模式。
桥接(Bridge)模式涉及充当桥接的接口。桥接使得具体类与接口实现者类无关。
这两种类型的类可以改变但不会影响对方。

当需要将抽象与其实现去耦合时使用桥接解耦(分离),使得两者可以独立地变化。这种类型的设计模式属于结构模式,因为此模式通过在它们之间提供桥接结构来将实现类和抽象类解耦(分离)。

这种模式涉及一个接口,作为一个桥梁,使得具体类的功能独立于接口实现类。两种类型的类可以在结构上改变而不彼此影响。

通过以下示例展示了桥接(Bridge)模式的使用,实现使用相同的抽象类方法但不同的网桥实现器类来绘制不同颜色的圆形。

实现实例

假设有一个DrawAPI接口作为一个桥梁实现者,具体类RedCircleGreenCircle实现这个DrawAPI接口。 Shape是一个抽象类,将使用DrawAPI的对象。 BridgePatternDemo这是一个演示类,将使用Shape类来绘制不同彩色的圆形。实现结果图如下 -

第1步

创建桥实现者接口。

DrawAPI.java

public interface DrawAPI {
   public void drawCircle(int radius, int x, int y);
}

Java

第2步

创建实现DrawAPI接口的具体桥接实现者类。

RedCircle.java

public class RedCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: red, radius: " + radius + ", x: " + x + ", " + y + "]");
   }
}

Java

GreenCircle.java

public class GreenCircle implements DrawAPI {
   @Override
   public void drawCircle(int radius, int x, int y) {
      System.out.println("Drawing Circle[ color: green, radius: " + radius + ", x: " + x + ", " + y + "]");
   }
}

Java

第3步

使用DrawAPI接口创建一个抽象类Shape
Shape.java

public abstract class Shape {
   protected DrawAPI drawAPI;

   protected Shape(DrawAPI drawAPI){
      this.drawAPI = drawAPI;
   }
   public abstract void draw();    
}

Java

第4步

创建实现Shape接口的具体类。

Circle.java

public class Circle extends Shape {
   private int x, y, radius;

   public Circle(int x, int y, int radius, DrawAPI drawAPI) {
      super(drawAPI);
      this.x = x;  
      this.y = y;  
      this.radius = radius;
   }

   public void draw() {
      drawAPI.drawCircle(radius,x,y);
   }
}

Java

第5步

使用ShapeDrawAPI类来绘制不同的彩色圆形。

BridgePatternDemo.java

public class BridgePatternDemo {
   public static void main(String[] args) {
      Shape redCircle = new Circle(100,100, 10, new RedCircle());
      Shape greenCircle = new Circle(100,100, 10, new GreenCircle());

      redCircle.draw();
      greenCircle.draw();
   }
}

Java

第6步

验证输出结果,执行上面的代码得到结果如下 -

Drawing Circle[ color: red, radius: 10, x: 100, 100]
Drawing Circle[  color: green, radius: 10, x: 100, 100]

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
桥接模式是一种结构型设计模式,它可以将抽象部分与实现部分分离,使它们可以独立地变化。在桥接模式中,抽象部分和实现部分之间通过一个桥接接口相互连接。 下面是一个简单的 Java 桥接模式示例: 首先,我们需要定义一个实现接口(Implementor): ```java public interface Implementor { void operationImpl(); } ``` 然后,我们需要定义一个抽象类(Abstraction),它包含一个实现接口的引用: ```java public abstract class Abstraction { protected Implementor impl; public Abstraction(Implementor impl) { this.impl = impl; } public abstract void operation(); } ``` 接下来,我们需要定义具体的实现类(ConcreteImplementorA 和 ConcreteImplementorB): ```java public class ConcreteImplementorA implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorA.operationImpl() called."); } } public class ConcreteImplementorB implements Implementor { @Override public void operationImpl() { System.out.println("ConcreteImplementorB.operationImpl() called."); } } ``` 最后,我们定义一个具体的抽象类(RefinedAbstraction),它通过实现抽象类中的 operation() 方法来调用实现接口中的 operationImpl() 方法: ```java public class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor impl) { super(impl); } @Override public void operation() { System.out.println("RefinedAbstraction.operation() called."); impl.operationImpl(); } } ``` 现在我们可以使用桥接模式来创建一个 RefineAbstraction 对象,并将其连接到 ConcreteImplementorA 或 ConcreteImplementorB 对象: ```java public static void main(String[] args) { Implementor implA = new ConcreteImplementorA(); Implementor implB = new ConcreteImplementorB(); Abstraction absA = new RefinedAbstraction(implA); Abstraction absB = new RefinedAbstraction(implB); absA.operation(); absB.operation(); } ``` 输出结果为: ``` RefinedAbstraction.operation() called. ConcreteImplementorA.operationImpl() called. RefinedAbstraction.operation() called. ConcreteImplementorB.operationImpl() called. ``` 这就是一个简单的 Java 桥接模式示例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智慧浩海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值