我试图了解适配器模式实现是否依赖于接口实现。 从我读到的,当我需要将类的接口转换为客户期望的另一个接口时,我应该使用适配器。
我被告知使用适配器连接到双管插头的3针插头的经典示例...
所以,根据我的理解,如果一个类中的某个方法有一个具有特定参数签名的方法,并且我想用需要更多(或更少)参数的逻辑包装它,那么我应该实现适配器模式。
从所有示例中可以看出,正确的方法是创建一个适配器类,它实现具有所需方法签名的接口,并将收养者作为适配器类中的成员。 然后,我可以通过实现的接口方法调用adpotee方法并输入逻辑。
问题是,如果我只需要使用一个被收养者类,为什么要使用界面? 删除接口位并将被收养者作为成员保持并以“独立”方法实现所需逻辑是不是更简单?
public class PostStatusAdapter
{
public interface IpostStatus
{
void Post(string i_Post, string i_Password);
}
public class UserAdapter : IpostStatus
{
User Adoptee = new User();
void IpostStatus.Post(string i_Post, string i_Password)
{
if (PasswordCorrect(i_Password))
{
Adoptee.PostStatus(i_Post);
}
}
private bool PasswordCorrect(string i_Password) { ... }
}
}
答案 0 :(得分:2)
是的,实际上它是一个适配器,如果它实现了一个“外部”接口或抽象API - 无论“内部”连接是否形式化为接口或抽象API。
所以当它挂钩到特定的内部实现时它仍然是一个适配器,它可以实现/回答合同&外部接口的方法。
如果你在Adapter本身中实现了重要的逻辑,它可能不再是一个适配器 - 那么它可能会成为一个委托。
代表自己实现功能和特别是通过委托到引用的对象。