适配器模式(类适配器,对象适配器)

1. 适配器模式简介

适配器模式用于解决接口不兼容问题,将一个类的接口转换成客户期望的另一个接口,使得原本由于接口不兼容而不能一起工作的类可以协同工作。适配器模式主要分为两类:

类适配器模式:通过继承适配者类来实现适配。
对象适配器模式:通过组合适配者对象来实现适配。

2. 定义接口

在 Interfaces 文件夹中定义目标接口(Target)和需要适配的接口(Adaptee):

 // IPlayer.cs - Target接口
 public interface IPlayer
 {
     void Attack();  // 玩家角色攻击
     void Move();    // 玩家角色移动
 }

 // Robot.cs - Adaptee类,来自第三方库,接口不兼容
 public class Robot
 {
     public void FireWeapon()
     {
         Console.WriteLine("机器人发射武器!");
     }
     public void Walk()
     {
         Console.WriteLine("机器人行走!");
     }
 }

2.1 定义并理解IPlayer接口和Robot类的功能

2.1.1. IPlayer 接口的功能

IPlayer 接口定义了玩家角色的基本行为,包括攻击和移动。具体方法如下:

  • Attack():表示玩家角色执行攻击动作。

  • Move():表示玩家角色执行移动动作。

IPlayer 接口是目标接口,客户端代码期望通过调用 Attack() 和 Move() 来控制玩家角色的行为。

2.1.2 Robot 类的功能

Robot 类是一个需要适配的类,它来自第三方库,提供了机器人角色的行为,但与 IPlayer 接口不兼容。具体方法如下:

  • FireWeapon():表示机器人发射武器。

  • Walk():表示机器人行走。

Robot 类的功能与 IPlayer 接口的功能相似,但方法名称和行为实现不同。


2.1.3 不兼容的部分

IPlayer 接口和 Robot 类的功能虽然相似,但接口定义不一致,导致它们无法直接协同工作。具体不兼容的部分如下:

功能 IPlayer 接口 Robot 类 不兼容的原因
攻击行为 Attack() FireWeapon() 方法名称不同,IPlayer 期望调用 Attack(),而 Robot 提供的是 FireWeapon()
移动行为 Move() Walk() 方法名称不同,IPlayer 期望调用 Move(),而 Robot 提供的是 Walk()

2.1.4 不兼容的示例

假设客户端代码期望通过 IPlayer 接口控制角色行为:

IPlayer player = new Player(); // 假设Player是IPlayer的实现类
player.Attack(); // 期望执行攻击
player.Move();   // 期望执行移动

但如果我们直接使用 Robot 类:

Robot robot = new Robot();
r
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值