桥接模式(Bridge)

在现实生活中,某些类具有两个或多个维度的变化,如图形既可按形状分,又可按颜色分。将颜色和形状两两结合的方式成为桥接。

桥接模式的结构与实现

可以将抽象化部分与实现化部分分开,取消二者的继承关系,改用组合关系。
1. 模式的结构
桥接(Bridge)模式包含以下主要角色。
抽象化(Abstraction)角色:定义抽象类,并包含一个对实现化对象的引用。

  1. 扩展抽象化(Refined Abstraction)角色:是抽象化角色的子类,实现父类中的业务方法,并通过组合关系调用实现化角色中的业务方法。
  2. 实现化(Implementor)角色:定义实现化角色的接口,供扩展抽象化角色调用。
  3. 具体实现化(Concrete Implementor)角色:给出实现化角色接口的具体实现。

举例:我们画不同颜色的形状

//首先是形状类和颜色的抽象类

  //该类为一个抽象类,主要提供画形状的方法 
public abstract class Shape {

    Color color;//形状里要有颜色的实例
  
    public void setColor(Color color) {
        this.color = color;
    }
    
    public abstract void draw();
}

//颜色类
public interface Color {
    public void bepaint(String shape);
}

//------------------------------------------------


//具体形状的实现:圆形
public class Circle extends Shape{
 
    public void draw() {
        color.bepaint("圆形");
    }
}

//具体形状的实现:长方形
public class Rectangle extends Shape{
 
    public void draw() {
        color.bepaint("长方形");
    }
 
}

//具体形状的实现:正方形
public class Square extends Shape{
 
    public void draw() {
        color.bepaint("正方形");
    }
 
}


//具体颜色的实现:黑色
public class Black implements Color{
 
    public void bepaint(String shape) {
        System.out.println("黑色的" + shape);
    }
}

//具体颜色的实现:灰色
public class Gray implements Color{
 
    public void bepaint(String shape) {
        System.out.println("灰色的" + shape);
    }
}

//具体颜色的实现:白色
public class White implements Color{
 
    public void bepaint(String shape) {
        System.out.println("白色的" + shape);
    }
 
}

//测试
    public static void main(String[] args) {
        //白色
        Color white = new White();
        //正方形
        Shape square = new Square();
        //白色的正方形
        square.setColor(white);
        square.draw();

        //长方形
        Shape rectange = new Rectangle();
        rectange.setColor(white);
        rectange.draw();


    }

运行结果

posted @ 2020-06-22 02:17  Prince丶prayK  阅读(141)  评论(0编辑  收藏  举报