乐于分享
好东西不私藏

软件设计模式示例:桥接模式

软件设计模式示例:桥接模式

/** * 抽象部分 - 形状 * 定义了高层次的操作,依赖于实现者(颜色)来完成具体的操作 */abstract class Shape {    protected Color color;  // 持有实现者的引用,protected 让子类可以访问    /**     * 构造函数,接收一个实现者(颜色)对象     *     * @param color 实现者对象(颜色)     */    public Shape(Color color) {        this.color = color;  // 初始化实现者引用    }    /**     * 抽象方法,具体的绘制操作由子类实现     * 高层次的操作方法,会调用实现者的方法来完成具体操作     */    public abstract void draw();}/** * 细化抽象类 - 方块 * 继承自抽象类 Shape,实现了具体的绘制逻辑 */class Square extends Shape {    /**     * 构造函数,接收一个实现者(颜色)对象     * 调用父类的构造函数,初始化实现者对象     *     * @param color 实现者对象(颜色)     */    public Square(Color color) {        super(color);  // super 关键字调用父类 Shape 的构造函数,初始化 color 成员变量    }    /**     * 重写绘制方法,实现方块的绘制逻辑     * 调用父类的 color 对象的方法来完成颜色相关的具体操作     */    @Override    public void draw() {        System.out.print("绘制方块,");  // 方块特有的绘制逻辑        color.applyColor();  // 委托给实现者(颜色)来完成具体的颜色应用操作    }}/** * 细化抽象类 - 圆形 * 继承自抽象类 Shape,实现了具体的绘制逻辑 */class Circle extends Shape {    /**     * 构造函数,接收一个实现者(颜色)对象     * 调用父类的构造函数,初始化实现者对象     *     * @param color 实现者对象(颜色)     */    public Circle(Color color) {        super(color);  // super 关键字调用父类 Shape 的构造函数,初始化 color 成员变量    }    /**     * 重写绘制方法,实现圆形的绘制逻辑     * 调用父类的 color 对象的方法来完成颜色相关的具体操作     */    @Override    public void draw() {        System.out.print("绘制圆形,");  // 圆形特有的绘制逻辑        color.applyColor();  // 委托给实现者(颜色)来完成具体的颜色应用操作    }}/** * 细化抽象类 - 三角形 * 继承自抽象类 Shape,实现了具体的绘制逻辑 */class Triangle extends Shape {    /**     * 构造函数,接收一个实现者(颜色)对象     * 调用父类的构造函数,初始化实现者对象     *     * @param color 实现者对象(颜色)     */    public Triangle(Color color) {        super(color);  // super 关键字调用父类 Shape 的构造函数,初始化 color 成员变量    }    /**     * 重写绘制方法,实现三角形的绘制逻辑     * 调用父类的 color 对象的方法来完成颜色相关的具体操作     */    @Override    public void draw() {        System.out.print("绘制三角形,");  // 三角形特有的绘制逻辑        color.applyColor();  // 委托给实现者(颜色)来完成具体的颜色应用操作    }}/** * 实现者接口 - 颜色 * 定义了具体操作的方法,作为实现部分的顶层接口 */interface Color {    /**     * 应用颜色的具体方法     * 具体的实现由不同的颜色类来完成     */    void applyColor();}/** * 具体实现者A类 - 红色 * 实现了 Color 接口,提供红色的具体实现 */class RedColor implements Color {    /**     * 应用颜色的具体操作方法     * 输出 "使用红色"     */    @Override    public void applyColor() {        System.out.println("使用红色");  // 红色的具体实现逻辑    }}/** * 具体实现者B类 - 蓝色 * 实现了 Color 接口,提供蓝色的具体实现 */class BlueColor implements Color {    /**     * 应用颜色的具体操作方法     * 输出 "使用蓝色"     */    @Override    public void applyColor() {        System.out.println("使用蓝色");  // 蓝色的具体实现逻辑    }}/** * 具体实现者C类 - 黄色 * 实现了 Color 接口,提供黄色的具体实现 */class YellowColor implements Color {    /**     * 应用颜色的具体操作方法     * 输出 "使用黄色"     */    @Override    public void applyColor() {        System.out.println("使用黄色");  // 黄色的具体实现逻辑    }}/** * 具体实现者D类 - 绿色 * 实现了 Color 接口,提供绿色的具体实现 */class GreenColor implements Color {    /**     * 应用颜色的具体操作方法     * 输出 "使用绿色"     */    @Override    public void applyColor() {        System.out.println("使用绿色");  // 绿色的具体实现逻辑    }}/** * 主类,包含主方法,用于演示桥接模式的使用 * 桥接模式将抽象部分(形状)与实现部分(颜色)分离,使它们可以独立变化 */public class Main {    /**     * 主方法,创建不同的形状对象和颜色对象,并通过形状对象来调用它们的绘制方法     * 演示了如何在运行时动态组合形状和颜色     *     * @param args 命令行参数     */    public static void main(String[] args) {        System.out.println("========== 桥接模式示例 ==========");        System.out.println("演示形状(抽象部分)和颜色(实现部分)的独立变化\n");        // 创建具体实现者(颜色)对象        Color redColor = new RedColor();       // 创建红色实现者对象        Color blueColor = new BlueColor();     // 创建蓝色实现者对象        Color yellowColor = new YellowColor(); // 创建黄色实现者对象        Color greenColor = new GreenColor();   // 创建绿色实现者对象(新增)        System.out.println("--- 方块形状(细化抽象类1)与各种颜色的组合 ---");        // 创建细化抽象类(方块)对象,传入不同的具体实现者(颜色)        Shape squareRed = new Square(redColor);           // 方块 + 红色        Shape squareBlue = new Square(blueColor);         // 方块 + 蓝色        Shape squareYellow = new Square(yellowColor);     // 方块 + 黄色        Shape squareGreen = new Square(greenColor);       // 方块 + 绿色(新增)        // 调用细化抽象类对象的绘制方法        squareRed.draw();      // 输出:绘制方块,使用红色        squareBlue.draw();     // 输出:绘制方块,使用蓝色        squareYellow.draw();   // 输出:绘制方块,使用黄色        squareGreen.draw();    // 输出:绘制方块,使用绿色(新增)        System.out.println("\n--- 圆形形状(细化抽象类2)与各种颜色的组合 ---");        // 创建细化抽象类(圆形)对象,传入不同的具体实现者(颜色)        Shape circleRed = new Circle(redColor);           // 圆形 + 红色        Shape circleBlue = new Circle(blueColor);         // 圆形 + 蓝色        Shape circleYellow = new Circle(yellowColor);     // 圆形 + 黄色        Shape circleGreen = new Circle(greenColor);       // 圆形 + 绿色(新增)        // 调用细化抽象类对象的绘制方法        circleRed.draw();     // 输出:绘制圆形,使用红色        circleBlue.draw();    // 输出:绘制圆形,使用蓝色        circleYellow.draw();  // 输出:绘制圆形,使用黄色        circleGreen.draw();   // 输出:绘制圆形,使用绿色(新增)        System.out.println("\n--- 三角形形状(细化抽象类3)与各种颜色的组合 ---");        // 创建细化抽象类(三角形)对象,传入不同的具体实现者(颜色)        Shape triangleRed = new Triangle(redColor);       // 三角形 + 红色        Shape triangleBlue = new Triangle(blueColor);     // 三角形 + 蓝色        Shape triangleYellow = new Triangle(yellowColor); // 三角形 + 黄色        Shape triangleGreen = new Triangle(greenColor);   // 三角形 + 绿色(新增)        // 调用细化抽象类对象的绘制方法        triangleRed.draw();    // 输出:绘制三角形,使用红色        triangleBlue.draw();   // 输出:绘制三角形,使用蓝色        triangleYellow.draw(); // 输出:绘制三角形,使用黄色        triangleGreen.draw();  // 输出:绘制三角形,使用绿色(新增)        System.out.println("\n========== 桥接模式优势说明 ==========");        System.out.println("1. 形状和颜色可以独立扩展:新增形状不影响颜色,新增颜色不影响形状");        System.out.println("2. 避免了类爆炸:4种形状 × 4种颜色 = 16个组合类,只需要4+4=8个类");        System.out.println("3. 运行时动态组合:可以在运行时灵活组合不同的形状和颜色");        System.out.println("4. 新增三角形时,不需要修改任何现有的颜色类,符合开闭原则");    }}
运行结果