欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

JAVA Bridge桥接模式

程序员文章站 2022-07-09 19:25:09
桥接模式一个复杂类中可能包括了多个维度的属性行为,桥接模式在逻辑上可以将这些维度进行分离,分离为抽象部分(接口)和实现(抽象类)部分。1.通过分离抽象部分和实现部分可使原本复杂的类各部分间解耦合,且更符合“单一职责原则”。2.抽象部分和实现部分这两个部分,可以独立地变化、独立扩展,通过*组合产生新的类。这种通过(聚合和关联关系)产生类的方式较传统通过继承产生新类的方式,扩展性更好,减少了系统中类,防止类爆炸问题。构建过程确定要设计的复杂类的维度。由抽象部分(Interface)和实现部分(Abst...

桥接模式

一个复杂类中可能包括了多个维度的属性行为,桥接模式在逻辑上可以将这些维度进行分离,分离为抽象部分(接口)和实现(抽象类)部分。1.通过分离抽象部分和实现部分可使原本复杂的类各部分间解耦合,且更符合“单一职责原则”。2.抽象部分和实现部分这两个部分,可以独立地变化、独立扩展,通过*组合产生新的类。这种通过(聚合和关联关系)产生类的方式较传统通过继承产生新类的方式,扩展性更好,减少了系统中类,防止类爆炸问题。

构建过程

  1. 确定要设计的复杂类的维度。由抽象部分(Interface)和实现部分(Abstract)组成。
  2. 抽象部分Interface。通过关联关系 关联实现部分。(由于抽象部分和实现部分最后要通过组合形成一个整体,因此两部分间要发生关系,可通过参数将实现部分的引用传入Interface方法,以实现抽象部分的行为方法作用于实现部分的对象)
  3. 实现部分Abstract。内部聚合了抽象部分的引用,通过聚合持有Interface的引用对象。
  4. 具体实现类分别实现Abstract和Interface。
  5. 具体实现类相互组合。实现全新的对象

DEMO

一个复杂类”各种颜色的形状“,通过桥接模式进行实现。(对应上面的构建过程进行解释)。

  1. 复杂类”各种颜色的形状“进行维度分离,分立为实现部分 Abstract Shape和抽象部分Interface Color。
  2. 抽象部分Interface Color的接口方法bepaint中持有shape的对象引用,以保证interface的行为可作用于shape。
  3. 实现部分 Abstract Shape。内部聚合封装了抽象部分Color的引用,持有了抽象部分Interface Color的引用对象(拥有了Color的行为)。
  4. 具体实现类分别继承、实现了Shape和Color。包括各种形状类,各种颜色类。
  5. 通过组合各种形状类,各种颜色类,获得构建的复杂新对象。(Shape类的Circle具体类中的Draw方法可通过持有Color对象引用调用其bepaint方法,实现复合类的行为。)

类图:搬一张别人的类图,自己懒得画了
JAVA Bridge桥接模式

主方法:

//DEMO桥接模式
//Color和抽象类shape 在两个维度上相互组合。
//Color类,在接口中传入Shape对象,修改Shape的对象
//Shape类,聚合了一个Color对象
public class Bridge_v1 {

    public static void main(String[] args) {
        Color black = new Black();
        Color gray = new Gray();
        Color white = new White();

        Shape circle = new Circle();
        Shape rectangle = new Rectangle();
        Shape square = new Square();

        circle.SetColor(black);
        rectangle.SetColor(gray);
        square.SetColor(white);

        circle.Draw();
        rectangle.Draw();
        square.Draw();
    }
}

所谓的“抽象部分”,Color接口:

//维度:Color
//接口类,通过形参数和Shape关联

interface Color {

    void PaintShape(Shape shape);
    void PaintColor();
}

所谓的“实现部分”,Shape抽象类:

//维度:Shape
//抽象类,聚合了Color接口
abstract class Shape {
    Color color;
    public abstract void SetColor(Color color);
    public abstract void Draw();
}

Color具体实现类:

public class Black implements Color{

    @Override
    public void PaintShape(Shape shape) {
        System.out.println(shape);
    }

    @Override
    public void PaintColor()
    {
        System.out.print("Black ");
    }
}
public class Gray implements Color{

    @Override
    public void PaintShape(Shape shape) {
        System.out.println(shape);
    }

    @Override
    public void PaintColor()
    {
        System.out.print("Gray ");
    }
}
public class White implements Color{

    @Override
    public void PaintShape(Shape shape) {
        System.out.println(shape);
    }

    @Override
    public void PaintColor()
    {
        System.out.print("White ");
    }
}

Shape具体实现类:

public class Circle extends Shape{

    @Override
    public void SetColor(Color color) {
        this.color = color;
    }

    @Override
    public void Draw() {
        this.color.PaintColor();
        this.color.PaintShape(this);
    }

    @Override
    public String toString() {
        return "Circle";
    }
}
public class Rectangle extends Shape{

    @Override
    public void SetColor(Color color) {
        this.color = color;
    }

    @Override
    public void Draw() {
        this.color.PaintColor();
        this.color.PaintShape(this);
    }

    @Override
    public String toString() {
        return "Rectangle";
    }
}
public class Square extends Shape{

    @Override
    public void SetColor(Color color) {
        this.color = color;
    }

    @Override
    public void Draw() {
        this.color.PaintColor();
        this.color.PaintShape(this);
    }

    @Override
    public String toString() {
        return "Square";
    }
}

使用场景

  1. 多维度的复杂类的重构。复杂类分解为多个单独维度的抽象,使得每个维度职责单一,解耦合,扩展性好。再通过组合实现原复杂类的逻辑。
  2. 要设计的类包含多维度属性。可使用桥接模式先进行维度分离,再进行组合。
  3. 通过继承扩展而产生大量类的场景,使用桥接可减少类数量,防止类爆炸。

优点

  1. 抽象和实现的分离。
  2. 优秀的扩展能力。
  3. 实现细节对客户透明。

本文地址:https://blog.csdn.net/qq_29047189/article/details/107486804

相关标签: 设计模式