七、桥接模式
桥接(Bridge)用于把抽象化与实现化解耦,使得而这可以独立变化。桥接模式中涉及到一个作为桥接的接口,使得实体类的功能独立于接口实现类,且这两个类型的类可被结构化改变,而互不影响。
简介
多数情况下,过多的继承可能造成类爆炸问题,扩展十分不灵活。减少类之间的耦合,使之相对独立。
桥接模式也有优缺点:1、优点是实现了抽象和现实的分离,增强扩展性,实现细节公开透明。2、缺点是增加了程序设计层次和理解层面的难度。
适用场景是:1、避免过多的类的继承的情况;2、需要两个类的相对独立。
演示
演示用不同的桥接实现类,相同的抽象方法,实现不同的颜色画画。定义一个接口DrawApi
和它的实现类RedCircle
、GreenCircle
。而Shape
是一个图形的抽象类。
- 定义接口
桥接接口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();
}
}