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

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

  • [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();
    }
}
相关推荐
記億揺晃着的那天10 分钟前
告别误操作!Spring Boot 多环境配置隔离与启动守卫实战
java·spring boot·后端·环境隔离
我是唐青枫18 分钟前
Java Spring Data JPA 实战指南:Repository 查询、分页与实体映射
java·开发语言
染翰1 小时前
Nacos 切换 Namespace 后配置不生效、占位符报错终极复盘
java·后端·spring·nacos
terry6001 小时前
2026图形验证码服务商横向测评|口碑、接入、安全选型全指南
java·大数据·人工智能·web安全·信息与通信·数据库架构
阿坤带你走近大数据1 小时前
java中泛型不能用基础数据类型
java·开发语言
skywalker_111 小时前
SpringBoot速通(实战教学)
java·spring boot·redis·rpc·ssm·mybatis-plus
云絮.1 小时前
增删改查操作
java·开发语言
阿坤带你走近大数据1 小时前
Linux中管道符的作用
java·linux·服务器
码不停蹄的玄黓2 小时前
Spring Boot 实现过滤器(Filter)三种常用方式
java·spring boot·后端
dualven_in_csdn2 小时前
一键起飞调用示例
android·java·javascript