Шаблон подключаемых адаптеров - это метод создания адаптеров, для которого не требуется создавать новый класс для каждого поддерживаемого интерфейса адаптера.
В Java такого рода вещи очень просты, но в них не задействован какой-либо объект, который действительно соответствовал бы объекту подключаемого адаптера, который вы могли бы использовать в C #.
Многие целевые интерфейсы адаптера Функциональные интерфейсы - интерфейсы, содержащие только один метод.
Когда вам нужно передать экземпляр такого интерфейса клиенту, вы можете легко указать адаптер, используя лямбда-функцию или ссылку на метод. Например:
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);
}
}