适配器的原理
把一个"接口不兼容"的类,包装成"我现在需要的接口",让原本不能一起工作的代码能够协同工作。
一、生活化理解
你现在用的是 国标插座
你买了一个 美标插头的电器
它们功能没问题,但接口不匹配。
你不会改墙,也不会拆电器,而是:
加一个转换头(适配器)
插头 ← 适配器 → 插座
原设备完全不动
使用方也无需改逻辑
这就是适配器模式的核心思想。
二、适配器模式解决什么问题?
已有类功能正确,但接口不符合当前系统需求
不能/不想修改已有代码(第三方库、旧代码)
希望系统对外暴露统一接口
1.定义你要使用的新攻击接口
cs
public interface IAttack
{
void Attack();
}
2.旧版的攻击使用方法
cs
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class OldWeapon
{
public void Fire()
{
Debug.Log("老武器开火!");
}
}
3.适配器
适配器中持有旧版攻击方法的引用,当玩家像调用新的攻击方法那样调用攻击方法的时候会自动帮玩家执行旧版的攻击方法。
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WeaponAdapter : IAttack
{
private OldWeapon oldWeapon;
public WeaponAdapter(OldWeapon weapon)
{
oldWeapon = weapon;
}
public void Attack()
{
// 接口转换
oldWeapon.Fire();
}
}
4.使用
当你要使用旧的攻击方法的时候直接创建一个适配器并把旧的攻击方法传入进去即可,无需修改旧版的攻击方法任何代码。
cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class AdapterUser : MonoBehaviour
{
void Start()
{
IAttack weapon = new WeaponAdapter(new OldWeapon());
weapon.Attack();
}
}
5.结果

总结
适配器模式的本质,并不是"多写一层代码",
而是在不破坏已有系统的前提下,让新旧代码能够和平共处。
在实际开发中,尤其是游戏项目里:
-
旧系统往往已经稳定运行
-
重构成本高、风险大
-
但新需求又必须接入统一接口
这时候,适配器就像一块"缓冲垫",
不改旧逻辑、不影响使用方,却解决了接口不兼容的问题。
只要记住一句话就够了:
当你无法(或不该)修改旧代码,却又想让它符合新接口时,适配器模式就是最合适的选择。