软件设计模式示例:桥接模式
/*** 抽象部分 - 形状* 定义了高层次的操作,依赖于实现者(颜色)来完成具体的操作*/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 对象的方法来完成颜色相关的具体操作*/@Overridepublic void draw() {System.out.print("绘制方块,"); // 方块特有的绘制逻辑color.applyColor(); // 委托给实现者(颜色)来完成具体的颜色应用操作}}/*** 细化抽象类 - 圆形* 继承自抽象类 Shape,实现了具体的绘制逻辑*/class Circle extends Shape {/*** 构造函数,接收一个实现者(颜色)对象* 调用父类的构造函数,初始化实现者对象** @param color 实现者对象(颜色)*/public Circle(Color color) {super(color); // super 关键字调用父类 Shape 的构造函数,初始化 color 成员变量}/*** 重写绘制方法,实现圆形的绘制逻辑* 调用父类的 color 对象的方法来完成颜色相关的具体操作*/@Overridepublic void draw() {System.out.print("绘制圆形,"); // 圆形特有的绘制逻辑color.applyColor(); // 委托给实现者(颜色)来完成具体的颜色应用操作}}/*** 细化抽象类 - 三角形* 继承自抽象类 Shape,实现了具体的绘制逻辑*/class Triangle extends Shape {/*** 构造函数,接收一个实现者(颜色)对象* 调用父类的构造函数,初始化实现者对象** @param color 实现者对象(颜色)*/public Triangle(Color color) {super(color); // super 关键字调用父类 Shape 的构造函数,初始化 color 成员变量}/*** 重写绘制方法,实现三角形的绘制逻辑* 调用父类的 color 对象的方法来完成颜色相关的具体操作*/@Overridepublic void draw() {System.out.print("绘制三角形,"); // 三角形特有的绘制逻辑color.applyColor(); // 委托给实现者(颜色)来完成具体的颜色应用操作}}/*** 实现者接口 - 颜色* 定义了具体操作的方法,作为实现部分的顶层接口*/interface Color {/*** 应用颜色的具体方法* 具体的实现由不同的颜色类来完成*/void applyColor();}/*** 具体实现者A类 - 红色* 实现了 Color 接口,提供红色的具体实现*/class RedColor implements Color {/*** 应用颜色的具体操作方法* 输出 "使用红色"*/@Overridepublic void applyColor() {System.out.println("使用红色"); // 红色的具体实现逻辑}}/*** 具体实现者B类 - 蓝色* 实现了 Color 接口,提供蓝色的具体实现*/class BlueColor implements Color {/*** 应用颜色的具体操作方法* 输出 "使用蓝色"*/@Overridepublic void applyColor() {System.out.println("使用蓝色"); // 蓝色的具体实现逻辑}}/*** 具体实现者C类 - 黄色* 实现了 Color 接口,提供黄色的具体实现*/class YellowColor implements Color {/*** 应用颜色的具体操作方法* 输出 "使用黄色"*/@Overridepublic void applyColor() {System.out.println("使用黄色"); // 黄色的具体实现逻辑}}/*** 具体实现者D类 - 绿色* 实现了 Color 接口,提供绿色的具体实现*/class GreenColor implements Color {/*** 应用颜色的具体操作方法* 输出 "使用绿色"*/@Overridepublic 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. 新增三角形时,不需要修改任何现有的颜色类,符合开闭原则");}}

夜雨聆风