设计模式(八):桥接模式

设计模式(八):桥接模式

  • [1. 桥接模式的介绍](#1. 桥接模式的介绍)
  • [2. 桥接模式的类图](#2. 桥接模式的类图)
  • [3. 桥接模式的实现](#3. 桥接模式的实现)
    • [3.1 创建实现接口](#3.1 创建实现接口)
    • [3.2 创建实现了 Cook 接口的实体桥接实现类](#3.2 创建实现了 Cook 接口的实体桥接实现类)
    • [3.3 使用 Cook 接口创建抽象类 Chef](#3.3 使用 Cook 接口创建抽象类 Chef)
    • [3.4 创建实现了 Chef 抽象类的实体类](#3.4 创建实现了 Chef 抽象类的实体类)
    • [3.5 测试](#3.5 测试)

1. 桥接模式的介绍

桥接模式(Bridge Pattern)属于结构型模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。它通过组合的方式,而不是继承的方式,将抽象和实现的部分连接起来。

桥接模式的四个关键角色:

  • 抽象(Abstraction):定义抽象接口,通常包含对实现接口的引用。
  • 扩展抽象(Refined Abstraction):对抽象的扩展,可以是抽象类的子类或具体实现类。
  • 实现(Implementor):定义实现接口,提供基本操作的接口。
  • 具体实现(Concrete Implementor):实现实现接口的具体类。

2. 桥接模式的类图

有一个作为桥接实现的 Cook 接口和实现了Cook 接口的实体类 ChineseCookEuropeanCookChef 是一个抽象类,将使用 Cook 的对象。

3. 桥接模式的实现

3.1 创建实现接口

java 复制代码
package blog;

/**
 * 实现接口
 */
public interface Cook {
    void cook();
}

3.2 创建实现了 Cook 接口的实体桥接实现类

java 复制代码
package blog;

/**
 * 具体实现
 */
public class ChineseCook implements Cook{
    @Override
    public void cook() {
        System.out.println("中餐");
    }
}
java 复制代码
package blog;

/**
 * 具体实现
 */
public class EuropeanCook implements Cook{
    @Override
    public void cook() {
        System.out.println("西餐");
    }
}

3.3 使用 Cook 接口创建抽象类 Chef

java 复制代码
package blog;

/**
 * 抽象接口
 */
public abstract class Chef {
    protected Cook cook;

    public Chef(Cook cook) {
        this.cook = cook;
    }

    protected abstract void cook();
}

3.4 创建实现了 Chef 抽象类的实体类

java 复制代码
package blog;

/**
 * 扩展抽象
 */
public class AdvancedChef extends Chef{

    public AdvancedChef(Cook cook) {
        super(cook);
    }

    @Override
    protected void cook() {
        cook.cook();
    }
}

3.5 测试

java 复制代码
package blog;

public class BridgeDemo {
    public static void main(String[] args) {
        AdvancedChef chef1 = new AdvancedChef(new ChineseCook());
        chef1.cook();

        AdvancedChef chef2 = new AdvancedChef(new EuropeanCook());
        chef2.cook();
    }
}
相关推荐
毕设源码-钟学长几秒前
【开题答辩全过程】以 基于Java的停车场信息管理系统设计与实现为例,包含答辩的问题和答案
java·开发语言
rannn_1111 分钟前
【苍穹外卖|Day7】缓存菜品、缓存套餐、添加购物车、查看购物车、清空购物车
java·spring boot·redis·后端·缓存·项目
晔子yy2 分钟前
带你了解Java中的Mono接口
java·数据库·oracle
zhougl9968 分钟前
Springboot - druid 连接池
java·spring boot·后端
全栈前端老曹8 分钟前
【Redis】发布订阅模型 —— Pub/Sub 原理、消息队列、聊天系统实战
前端·数据库·redis·设计模式·node.js·全栈·发布订阅模型
MX_935920 分钟前
Spring基本配置和注入配置注解使用
java·后端·spring
数新网络26 分钟前
赋能某跨境智慧物流:基于 AWS Graviton 的全栈数据平台实现 25% 成本节省
java·云计算·aws
C雨后彩虹29 分钟前
ThreadLocal全面总结,从理论到实践再到面试高频题
java·面试·多线程·同步·异步·threadlocal
资深web全栈开发30 分钟前
设计模式之桥接模式 (Bridge Pattern)
javascript·设计模式·桥接模式
至此流年莫相忘34 分钟前
Kubernetes核心概念
java·容器·kubernetes