设计模式学习笔记--桥接模式

七、桥接模式

桥接(Bridge)用于把抽象化与实现化解耦,使得而这可以独立变化。桥接模式中涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,且这两个类型的类可被结构化改变,而互不影响。

简介

多数情况下,过多的继承可能造成类爆炸问题,扩展十分不灵活。减少类之间的耦合,使之相对独立。

桥接模式也有优缺点:1、优点是实现了抽象和现实的分离,增强扩展性,实现细节公开透明。2、缺点是增加了程序设计层次和理解层面的难度。
适用场景是:1、避免过多的类的继承的情况;2、需要两个类的相对独立。

演示

演示用不同的桥接实现类,相同的抽象方法,实现不同的颜色画画。定义一个接口DrawApi和它的实现类RedCircleGreenCircle。而Shape是一个图形的抽象类。

bridge

  • 定义接口

桥接接口DrawApi.java

public interface DrawApi {
  //绘制圆形,半径、圆心坐标x,y
  public void drawCircle(int radius,int x,int y);
}
  • 创建实现类

RedCircle.java

public class RedCircle implements DrawApi {
  @override
  public void drawCircle(int radius,int x,int y){
    System.out.println("Draw Red Circle " + "r = " + raius + "Ox = " + x + "Oy = " + y );
  }
}

GreenCircle.java

public class GreenCircle implements DrawApi {
  @override
  public void drawCircle(int radius,int x,int y){
    System.out.println("Draw Green Circle " + "r = " + raius + "Ox = " + x + "Oy = " + y );
  }
}
  • 创建抽象类

Shape.java

public abstract class Shape {
  //使用桥接接口`DrawApi`
  protected DrawApi drawapi;

  //构造函数中初始化drawapi
  protected Shape(DrawApi drawapi){
    this.drawapi = drawapi;
  }
  //抽象的draw方法
  public abstract void draw();
}
  • 创建接口实现类

Circle.java

public class Circle implements Shape{
  //基本属性
  private int radius,x,y;
  //构造函数,接收接本参数
  public Circle(int radius,int x,int y,DrawApi drawapi){
    super(drawapi);
    this.x = x;
    this.y = y;
    this.radius = radius;
  }

  public void draw(){
    //drawapi是Shape的成员变量,子类继承使用。
    drawapi.drawCircle(radius,x,y)
  }
}
  • 调用

BridgePatternDemo.java

public class BridgePatternDemo{
  public static void main(String[] args){
    //
    Shape red = new Circle(100,100,10,new RedCircle());
    Shape green = new Circle(90,100,10,new GreenCircle());
    //绘制图形
    red.draw();
    green.draw();
  }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值