如何在 Java 中实现可插拔适配器设计模式
How to implement Pluggable Adapter design pattern in Java
我知道如何实现基本的适配器设计模式,也知道 C# 如何使用委托来实现可插拔适配器设计。但是我找不到 Java 中实现的任何内容。您介意指出示例代码吗?
提前致谢。
可插入适配器模式是一种创建适配器的技术,它不需要为您需要支持的每个适配接口创建一个新的class。
在 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)
{
...
}
}
当目标接口有多个方法时,我们使用匿名内部class:
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);
}
}
我知道如何实现基本的适配器设计模式,也知道 C# 如何使用委托来实现可插拔适配器设计。但是我找不到 Java 中实现的任何内容。您介意指出示例代码吗?
提前致谢。
可插入适配器模式是一种创建适配器的技术,它不需要为您需要支持的每个适配接口创建一个新的class。
在 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)
{
...
}
}
当目标接口有多个方法时,我们使用匿名内部class:
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);
}
}