首页 > 编程语言 >java桥接模式案例

java桥接模式案例

时间:2024-04-18 10:24:05浏览次数:21  
标签:draw java 桥接 void 案例 Shape API Using public

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

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a Rectangle");
    }
}

public class Triangle implements Shape {
    @Override
    public 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{

    @Override
    public void draw(Shape shape) {
        System.out.print("Using Java 2D API to draw: "+shape.getClass().getSimpleName());
        shape.draw();
    }
public class OpenGLDrawAPI implements DrawAPI{

    @Override
    public 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对象来绘制图形,实现了抽象部分与实现部分的解耦。这样,我们可以很容易地添加新的形状或绘图方式,而不需要修改现有的代码。

标签:draw,java,桥接,void,案例,Shape,API,Using,public
From: https://www.cnblogs.com/DuWenjie/p/18142933

相关文章

  • java play框架get Start
    背景:一个老板找到我,他有一个项目是用play框架写的,我从来没有听说java还有一个play框架。回来以后我去网上查了一下,play框架是一个轻量级的全栈开发框架,完全背离了传统servlet的风格。play框架在国内使用并不多,使用简单易上手,开发大型项目也能胜任,这样的项目原来设计者设计完......
  • java使用Workbook workbook = new XSSFWorkbook(inputStream);导出数据频繁GC
    由于xlsx底层使用xml存储,占用内存会比较大,官方也意识到这个问题,在3.8版本之后,提供了SXSSFWorkbook来优化写性能原来代码Workbookworkbook= newXSSFWorkbook(inputStream);优化后代码Workbookworkbook= newSXSSFWorkbook(newXSSFWorkbook(inputStream));此处有坑,请往......
  • java代码审计跨站脚本(XSS)--反射型
    一、基础:跨站脚本(Xss)一、原理:恶意攻击者往web页面里插入恶意js代码,而在服务端没有对数据进行严格的过滤。当用户浏览页面时,js代码必须在该html页面中(hrml必须要存在这个而已艾玛),从而达到攻击用户的目的。(攻击者构造的的js代码会被当作正常的HTML、JS代码被解析,执行Js脚本实现攻......
  • 当 mysql-connector-java-5 遇上 MySQL8,终究还是错付了 → 门当户对真的很重要!
    开心一刻今天,老婆给我发消息老婆:老公,儿子从隔壁邻居家回来了老婆:是先打还是先洗?我:先洗吧,万一打错人了呢老婆:先洗脸吧,没错就边打边洗起因在我们的固有认知中, mysql-connector-java-5.x.x 连接的是 MySQL5 ,而 mysql-connector-java-8.x.x 连......
  • Python案例:输出公元后到目前为止全部回文日期
    一、回文日期一个日期,如果顺读和倒读都一样,那么就称之为回文日期,比如今天:20211202,就是一个神奇的回文日期。二、提出任务输出公元后的全部回文日期要求每行输出五个回文日期统计总共有多少个回文日期三、完成任务(一)涉及知识点1、time模块time模块有两个常用函数time()......
  • Java并发(二十五)----异步模式之生产者/消费者
    1.定义要点与Java并发(二十二)----同步模式之保护性暂停中的保护性暂停中的GuardObject不同,不需要产生结果和消费结果的线程一一对应这样的好处是消费队列可以用来平衡生产和消费的线程资源生产者仅负责产生结果数据,不关心数据该如何处理,而消费者专心处理结果数据......
  • JavaScript初了解
    最近想写一个web应用,打算稍微学一下。本文是个人在学习过程中的笔记,目的是分享。本文的阅读对象是已经有一门编程语言的基础,想进一步大致了解JS语言的读者本文章不适合完全零基础且对前端毫无概念的伙伴。1、变量和数据类型//number数值型varmyNum=10//字符型varmyStr......
  • Java API之查询文档
    1、查询指定id文档importorg.elasticsearch.action.get.GetRequest;importorg.elasticsearch.action.get.GetResponse;importorg.elasticsearch.client.RequestOptions;importorg.util.ConnectElasticsearch;publicclassGetDoc{publicstaticvoidmain(Strin......
  • JavaFx项目打包成exe,并集成Jre,使Java项目在任意机器运行
    1.关键点:通过springboot打包插件,将项目依赖都打到一个jar包内。以下是pom配置文件:<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artif......
  • NLP自然语言处理—主题模型LDA案例:挖掘人民网留言板文本数据|附代码数据
    全文链接:http://tecdat.cn/?p=2155最近我们被客户要求撰写关于NLP自然语言处理的研究报告,包括一些图形和统计输出。随着网民规模的不断扩大,互联网不仅是传统媒体和生活方式的补充,也是民意凸显的地带。领导干部参与网络问政的制度化正在成为一种发展趋势,这种趋势与互联网发展的时......