java桥接模式案例

news/发布时间2024/5/3 5:07:55
  • 桥接模式(Bridge Pattern)是一种结构型设计模式,它将抽象部分与实现部分分离,使它们可以独立变化。在桥接模式中,抽象类和它的实现类之间使用组合/聚合关系,而不是继承关系。这样,客户端代码可以针对抽象编程,而实现细节则可以在运行时动态地指定。
  • 场景:
    假设我们要设计一个图形绘制系统,其中包含了多种形状(如圆形、矩形、三角形)和多种绘图方式(如使用Java 2D API、OpenGL等)。我们希望能够在不修改形状类的情况下,灵活地添加新的绘图方式,反之亦然
    实现:
  1. Shape接口:定义所有形状共有的方法。
public interface Shape {void draw();
}
  1. Circle、Rectangle、Triangle类:实现Shape接口,并提供各自的draw()方法的具体实现。
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a Circle");}
}public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a Rectangle");}
}public class Triangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a Triangle");}
}
  1. DrawAPI接口:定义绘图方式的接口。
public interface DrawAPI {void draw(Shape shape);
}
  1. Java2DDrawAPI、OpenGLDrawAPI类:实现DrawAPI接口,并提供各自的draw()方法的具体实现。
public class Java2DDrawAPI implements DrawAPI{@Overridepublic void draw(Shape shape) {System.out.print("Using Java 2D API to draw: "+shape.getClass().getSimpleName());shape.draw();}
public class OpenGLDrawAPI implements DrawAPI{@Overridepublic void draw(Shape shape) {System.out.print("Using OpenGL API to draw :"+shape.getClass().getSimpleName());shape.draw();}
}
  1. 客户端代码:使用桥接模式来绘制图形。
public class Client {public static void main(String[] args) {Circle circle = new Circle();Rectangle rectangle = new Rectangle();Triangle triangle = new Triangle();//使用Java 2D API绘制图形Java2DDrawAPI java2DDrawAPI = new Java2DDrawAPI();java2DDrawAPI.draw(circle);java2DDrawAPI.draw(rectangle);java2DDrawAPI.draw(triangle);//使用OpenGL API绘制图形OpenGLDrawAPI openGLDrawAPI = new OpenGLDrawAPI();openGLDrawAPI.draw(circle);openGLDrawAPI.draw(rectangle);openGLDrawAPI.draw(triangle);}

代码结果输出:

Using Java 2D API to draw: CircleDrawing a Circle
Using Java 2D API to draw: RectangleDrawing a Rectangle
Using Java 2D API to draw: TriangleDrawing a Triangle
Using OpenGL API to draw :CircleDrawing a Circle
Using OpenGL API to draw :RectangleDrawing a Rectangle
Using OpenGL API to draw :TriangleDrawing a Triangle
  • 在这个案例中,Shape接口定义了所有形状共有的方法,而DrawAPI接口定义了绘图方式的接口。Circle、Rectangle、Triangle类实现了Shape接口,Java2DDrawAPI和OpenGLDrawAPI类实现了DrawAPI接口。客户端代码通过组合Shape对象和DrawAPI对象来绘制图形,实现了抽象部分与实现部分的解耦。这样,我们可以很容易地添加新的形状或绘图方式,而不需要修改现有的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/05113474.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

03-支付服务

1. 交易流程 下面我们来看下基础服务组件中的交易模块,我们已完成结算功能,如图所示,在结算这个模块中我们都会进入到一个子流程【交易流程】:对于交易,大家应该都知道,就是买东西付款,卖东西收款,在任何一个盈利的系统中,都离不开交易模块,下图是一个扫码支付的粗略…

读天才与算法:人脑与AI的数学思维笔记03_AlphaGo

读天才与算法:人脑与AI的数学思维笔记03_AlphaGo1. 国际象棋 1.1. 1997年计算机“深蓝”(Deep Blue)击败了顶尖国际象棋手,但机器取代数学研究机构还言之尚早 1.2. 下国际象棋与数学的形式化证明颇有相似之处,但学者认为中国围棋的思维方式更能够体现数学家思考的创造性和…

框架图与动机结构化与可重定目标代码生成

框架图与动机结构化与可重定目标代码生成 用于数值计算的代码生成方法传统上侧重于优化循环嵌套的性能。相关分析侧重于标量元素,因为循环嵌套的主体通常计算单个元素。这样的分析必须考虑内存依赖性与混叠。这些方法在过去进行了深入研究,并已达到高度成熟。当从像C或Fortra…

MVCC

多版本并发控制,多个事物并发的情况下到底该访问哪个版本你解释一下MVCC?mvcc的意思是多版本并发控制。指维护一个数据的多个版本,使得读写操作没有冲突, 它的底层实现主要是依赖了数据库中的三个部分,隐藏字段,undo log日志和readView读视图 隐藏字段是指:在mysql中给每…

NGINX Ingress Controller 设置未配置过的域名增加默认路由

背景 k8s 集群对应的公网 slb ip 经常被人绑定域名,监控侧经常会收集到 502 相关状态码的异常告警,着手处理这种bad case策略 1. 所有没有在ingress 配置过的域名要进行处理,即不是公司的、非法绑定到slb 上的域名要加上一条策略 2. NGINX Ingress Controller 设置未配置过…