适配器模式不使用接口

时间:2013-08-08 00:38:40

标签: design-patterns interface adapter

我试图了解适配器模式实现是否依赖于接口实现。 从我读到的,当我需要将类的接口转换为客户期望的另一个接口时,我应该使用适配器。

我被告知使用适配器连接到双管插头的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) { ... }
    }
}

1 个答案:

答案 0 :(得分:2)

是的,实际上它是一个适配器,如果它实现了一个“外部”接口或抽象API - 无论“内部”连接是否形式化为接口或抽象API。

所以当它挂钩到特定的内部实现时它仍然是一个适配器,它可以实现/回答合同&外部接口的方法。

如果你在Adapter本身中实现了重要的逻辑,它可能不再是一个适配器 - 那么它可能会成为一个委托。

代表自己实现功能和特别是通过委托到引用的对象。