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

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

  • [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();
    }
}
相关推荐
贱贱的剑2 分钟前
2.单例模式
单例模式·设计模式
全栈凯哥40 分钟前
16.Spring Boot 国际化完全指南
java·spring boot·后端
M1A11 小时前
Java集合框架深度解析:LinkedList vs ArrayList 的对决
java·后端
Top`1 小时前
Java 泛型 (Generics)
java·开发语言·windows
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ1 小时前
如何使用Java WebSocket API实现客户端和服务器端的通信?
java·开发语言·websocket
是小崔啊1 小时前
tomcat源码02 - 理解Tomcat架构设计
java·tomcat
没有bug.的程序员2 小时前
JAVA面试宝典 -《安全攻防:从 SQL 注入到 JWT 鉴权》
java·安全·面试
栈溢出了2 小时前
MyBatis实现分页查询-苍穹外卖笔记
java·笔记·mybatis
morningcat20182 小时前
java17 gc笔记
java·jvm·笔记
2 小时前
Unity开发中常用的洗牌算法
java·算法·unity·游戏引擎·游戏开发