1

我知道如何实现基本的适配器设计模式,也知道 C# 如何使用委托来实现可插拔适配器设计。但我找不到任何用 Java 实现的东西。您介意指出一个示例代码吗?

提前致谢。

4

1 回答 1

1

可插入适配器模式是一种创建适配器的技术,不需要为您需要支持的每个适配器接口创建一个新类。

在 Java 中,这类事情非常简单,但没有涉及到任何实际对应于您可能在 C# 中使用的可插入适配器对象的对象。

许多适配器目标接口是功能接口——只包含一种方法的接口。

当您需要将此类接口的实例传递给客户端时,您可以使用 lambda 函数或方法引用轻松指定适配器。例如:

interface IRequired
{
   String doWhatClientNeeds(int x);
}

class Client
{
   public void doTheThing(IRequired target);
}

class Adaptee
{
    public String adapteeMethod(int x);
}

class ClassThatNeedsAdapter
{
    private final Adaptee m_whatIHave;

    public String doThingWithClient(Client client)
    {
       // super easy lambda adapter implements IRequired.doWhatClientNeeds
       client.doTheThing(x -> m_whatIHave.adapteeMethod(x));
    }

    public String doOtherThingWithClient(Client client)
    {
       // method reference implements IRequired.doWhatClientNeeds
       client.doTheThing(this::_complexAdapterMethod);
    }

    private String _complexAdapterMethod(int x)
    {
        ...
    }
}

当目标接口有多个方法时,我们使用匿名内部类:

interface IRequired
{
   String clientNeed1(int x);
   int clientNeed2(String x);
}

class Client
{
   public void doTheThing(IRequired target);
}


class ClassThatNeedsAdapter
{
    private final Adaptee m_whatIHave;

    public String doThingWithClient(Client client)
    {
       IRequired adapter = new IRequired() {
           public String clientNeed1(int x) {
               return m_whatIHave.whatever(x);
           }
           public int clientNeed2(String x) {
               return m_whatIHave.whateverElse(x);
           }
       };
       return client.doTheThing(adapter);
    }
}
于 2019-04-09T03:02:46.407 回答