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

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

  • [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();
    }
}
相关推荐
lcreek2 小时前
Java 反序列化漏洞深度解析(一):从URLDNS到真正的DNS探测
java·反序列化漏洞
杰克尼2 小时前
天机学堂复习总结(day03-day04)
java·开发语言·redis·elasticsearch·spring cloud
x***r1512 小时前
jdk-11.0.16.1_windows使用步骤详解(附JDK 11环境变量配置与验证教程)
java·开发语言·windows
弹简特3 小时前
【Java项目-轻聊】01-项目演示+项目介绍+准备工作+项目源码
java
luck_bor3 小时前
File类&递归作业
java·开发语言
武子康4 小时前
Java-07 深入浅出 MyBatis数据库一对多关系模型实战:表结构设计与查询实现
java·后端
REDcker6 小时前
Linux OverlayFS详解
java·linux·运维
Royzst6 小时前
xml知识点
java·服务器·前端
鱼鳞_6 小时前
苍穹外卖-Day08(缓存套餐)
java·redis·缓存
过期动态7 小时前
【LeetCode 热题 100】移动零
java·数据结构·算法·leetcode·职场和发展·rabbitmq