08 桥接模式

发布时间:2024年01月08日

桥接模式

桥接模式 使用场景,存在多个纬度的变化,每个纬度都需要进行扩展 使用继承的话会导致子类发生裂变,数量极具膨胀。 使用桥接模式的话这能避免这种现象。使子类线性膨胀。 比如我们由一个汽车,他由许多的部件构成,比如外形、颜色 我们有2个接口,一个外形接口,一个颜色接口,每次实现都继承这两个接口。 外形每多一个,就会多颜色数量的车辆。总的类型数量是 外形的数量 * 颜色的数量 实现类的数量也是以上那么多。 而使用桥接模式 , 总的数量不变,但是实现类的数量却变为了 外形的数量 + 颜色的数量。
在这里插入图片描述

demo

package structuralpattern;

/**
 * @author tx
 * @version 1.0
 * @date 2024/1/7 22:26
 * @description:
 * 桥接模式
 * 使用场景,存在多个纬度的变化,每个纬度都需要进行扩展
 * 使用继承的话会导致子类发生裂变,数量极具膨胀。
 * 使用桥接模式的话这能避免这种现象。使子类线性膨胀。
 * 比如我们由一个汽车,他由许多的部件构成,比如外形、颜色
 * 我们有2个接口,一个外形接口,一个颜色接口,每次实现都继承这两个接口。
 * 外形每多一个,就会多颜色数量的车辆。总的类型数量是 外形的数量 * 颜色的数量
 * 实现类的数量也是以上那么多。
 *
 * 而使用桥接模式 ,
 * 总的数量不变,但是实现类的数量却变为了 外形的数量 + 颜色的数量。
 */
public class BridgePattern {
    public static void main(String[] args) {
        // 获取一个轮胎,牌子是NB,颜色是蓝色,形状是圆形,材料是PC
        Wheel wheel = new NB(new Blue(),new Circle(),new PC());
        // 获取一个轮胎,牌子是红山,颜色是红色,形状是方向,材料是LT
        Wheel wheel1 = new Redhill(new Red(),new Square(),new LT());
        /**
         * 后面的三个参数可以任意搭配,
         * 这样就将各个维度然后构成的轮胎由指数变为线性,
         * 避免类的膨胀。
         */
        wheel.show();
        wheel1.show();
    }
}

/**
 * 轮子的抽象层,
 * 简单使用模板方法定义轮子的构成的打印顺序
 */
abstract class Wheel{
    // 颜色
    private final Color color;
    // 形状
    private final Shape shape;
    // 材料
    private final Material material;
    private String brand;

    public Wheel(Color color, Shape shape, Material material) {
        this.color = color;
        this.shape = shape;
        this.material = material;
    }
    public void show(){
        brand = this.brandShow();
        System.out.println(brand+"车轮配置:");
        color.printColor();
        shape.printShape();
        material.printMaterial();
    }

    /**
     * 车轮的品牌
     */
    protected abstract String brandShow();
}
/**
 * 具体的车轮 NB牌
 */
class NB extends Wheel {
    public NB(Color color, Shape shape, Material material) {
        super(color, shape, material);
    }

    /**
     * 车轮的品牌
     */
    @Override
    protected String brandShow() {
        return "牛B牌";
    }

}
class Redhill extends Wheel {
    public Redhill(Color color, Shape shape, Material material) {
        super(color, shape, material);
    }

    /**
     * 车轮的品牌
     */
    @Override
    protected String brandShow() {
        return "红山牌";
    }

}

/**
 * 颜色接口 --------------------------
 */
interface Color{
    /**
     * 打印颜色
     */
    void printColor();
}
class Red implements Color{

    /**
     * 打印颜色
     */
    @Override
    public void printColor() {
        System.out.println("红色");
    }
}

class Blue implements Color{

    /**
     * 打印颜色
     */
    @Override
    public void printColor() {
        System.out.println("蓝色");
    }
}

/**
 * 形状 --------------------------
 */
interface Shape{
    /**
     * 打印形状
     */
    void printShape();
}
class Circle implements Shape{

    /**
     * 打印形状
     */
    @Override
    public void printShape() {
        System.out.println("圆形");
    }
}

class Square implements Shape{

    /**
     * 打印形状
     */
    @Override
    public void printShape() {
        System.out.println("正方形");
    }
}
/**
 * 材料 --------------------------
 */
interface Material{
    /**
     * 打印材料
     */
    void printMaterial();
}
class PC implements Material{
    /**
     * 打印材料
     */
    @Override
    public void printMaterial() {
        System.out.println("PC材料");
    }
}
class LT implements Material{
    /**
     * 打印材料
     */
    @Override
    public void printMaterial() {
        System.out.println("LT材料");
    }
}

demo打印
在这里插入图片描述

文章来源:https://blog.csdn.net/qq_43932985/article/details/135447041
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。