当前位置: 首页 > article >正文

桥接 设计模式 软考

package com.winner.bridge_pattern;

/**
 * 桥接设计模式是一种结构型设计模式,它允许将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过创建桥接接口来实现不同的抽象与实现之间的连接。
 * 它可以在不影响客户端代码的情况下,动态地将抽象部分和实现部分组合起来。
 *
 * 想象一下你要开发一个画图软件,其中有多种形状(如圆形、矩形等)和多种颜色(如红色、蓝色等)。
 * 使用桥接模式,你可以将形状和颜色分别作为抽象部分和实现部分,然后通过桥接接口将它们连接起来
 *
 * 定义形状抽象类
 *
 * 在这个示例中,Color接口定义了不同颜色的实现,例如Red和Blue。Shape是一个抽象类,
 * 它使用Color接口作为桥接接口,将不同的形状(如Circle和Rectangle)与颜色实现部分连接起来。
 *
 * @Author wangxinle5
 * @since 2024-04-25
 */
// 定义颜色接口
interface Color {
    void applyColor();
}

// 实现不同颜色类
class Red implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying red color");
    }
}

class Blue implements Color {
    @Override
    public void applyColor() {
        System.out.println("Applying blue color");
    }
}

// 定义形状抽象类
abstract class Shape {
    protected Color color; // 使用桥接接口

    protected Shape(Color color) {
        this.color = color;
    }

    public abstract void draw();
}

// 实现不同形状类
class Circle extends Shape {
    public Circle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.print("Drawing circle with ");
        color.applyColor(); // 使用颜色接口
    }
}

class Rectangle extends Shape {
    public Rectangle(Color color) {
        super(color);
    }

    @Override
    public void draw() {
        System.out.print("Drawing rectangle with ");
        color.applyColor(); // 使用颜色接口
    }
}

// 测试桥接模式
public class BridgePatternDemo {
    public static void main(String[] args) {
        // 使用不同颜色创建形状  Shape抽象类有桥接接口 Circle和Rectangle就可以用桥接接口的方法
        Shape redCircle = new Circle(new Red());
        Shape blueRectangle = new Rectangle(new Blue());

        // 绘制形状
        redCircle.draw();
        blueRectangle.draw();
    }
}


http://www.kler.cn/a/386467.html

相关文章:

  • HarmonyOS的@State装饰器的底层实现
  • 应用于新能源汽车NCV4275CDT50RKG车规级LDO线性电压调节器芯片
  • 深入理解接口测试:实用指南与最佳实践5.0(一)
  • 闯关leetcode——3174. Clear Digits
  • AI 扩展开发者思维方式:以 SQL 查询优化为例
  • vue2或vue3的name属性有什么作用?
  • BIM 地铁站智能可视化应用
  • 简单介绍Nginx服务器的反向代理、负载均衡
  • 小柯剧场“真人秀”:如何玩转情感与竞技的双重游戏?
  • 学习记录:js算法(八十九):电话号码的字母组合
  • # 设置ubuntu为中文后,如何保留用户家目录等文件夹名为英文
  • 基于FE1.1(非FE1.1S)的HUB拓展板子 2024/11/9
  • 【力扣热题100】[Java版] 刷题笔记-160. 相交链表
  • Linux:调试器 gdb/cgdb 的使用
  • Spark的容错机制
  • 数据编排与ETL有什么关系?
  • Springboot中的单元测试该如何进行?
  • 在职场,多少人输在不懂人情世故上!这12条人情世故,你懂几条?
  • C#中日期和时间的处理
  • 15分钟学 Go 第 45 天 : 使用Docker容器
  • Leetcode 778 Swim in a Rising water
  • (十三)JavaWeb后端开发——MySQL2
  • Spring的异步详解(@Async)
  • arkUI:层叠布局(Stack)
  • 测试概念以及测试bug
  • cannot locate symbol _ZTVNSt6__ndk119basic_ostringstreamIcNS_