java的适配器设计模式

时间:2020-02-23 14:36:07  来源:igfitidea点击:

CodeProjectReal Life示例:

一个非常简单的例子是使用手机充电器。
假设手机需要9伏充电,但主要供应是220 V,这不是我们所需要的,但它可以是一个来源,我们可以拥有一个可以获得9 v的东西,其中220 v中可以获得9 v并向手机提供9 v并提供给手机供电。
充电。
现在电话充电器充当适配器。
所以基本上它在两个不相关的接口之间建立了关系。
这就是Adpater模式如何工作。

意图:

如gof所描述的:

"将类的接口转换为另一个接口客户端。
会让类工作在一起,因为不兼容的接口而无法否则"。

适配器也称为:

包装(Wrapper)

元素:

  • 目标
  • 定义特定于域的接口客户端使用。
  • 客户
  • 与符合目标接口的对象合作。
  • Adapeee
  • 定义需要适应的现有接口
  • 适配器
  • 适用Adaptee的接口到目标接口。

工作流程:

客户端在适配器实例上呼叫操作。
在转动适配器调用执行请求的Adaptee操作。

何时使用它:

  • 我们希望使用现有类,其接口与我们需要的接口不匹配。
  • 我们希望创建一个与不相关或者不可预见的类协作的备份类,这是不一定具有兼容接口的类。

例子:

比较适配器图案的上述通用描述。

我的示例包括以下元素:

  • printablelist(目标)
  • printstring(Adapeee)
  • PrintableListAdapter(适配器)

所有上面的java代码:

考虑我们有一个第三方库,通过printstring类提供打印字符串功能。
这是我们的Adaptee。
我知道这是愚蠢的assumpsion,但现在让它随身携带。

printstring.java(Adapeee):

package org.arpit.javapostsforlearning.designpatterns;
 
public class PrintString {
 
 public void print(String s)
 {
  System.out.println(s);
 }
}

客户端处理ArrayList,但不使用String.we提供了一个预期客户端输入的PrintableList接口。
这是我们的目标。

printableList.java(目标):

package org.arpit.javapostsforlearning.designpatterns;
 
import java.util.ArrayList;
 
public interface PrintableList {
 void printList(ArrayList list);
}

让我们假设我们现在无法改变它。
最后,我们有PrintableListAdapter类,它将实现PrinterableList接口,并将处理我们的Adaptee类。
printableListAdapter.java(适配器):

package org.arpit.javapostsforlearning.designpatterns;
 
import java.util.ArrayList;
 
public class PrintableListAdapter implements PrintableList{
 
 public void printList(ArrayList list) {
 
  //Converting ArrayList to String so that we can pass String to
  //adaptee class
  String listString = "";
 
  for (String s : list)
  {
      listString += s + "t";
  }
  
  //instantiating adaptee class
  PrintString printString=new PrintString();
  ps.print(listString);
 }
}

AdapterDesignPatternmain.java:

package org.arpit.javapostsforlearning.designpatterns;
 
import java.util.ArrayList;
public class AdapterDesignPatternMain {
 
 public static void main(String[] args)
 {
  ArrayList list=new  ArrayList();
  list.add("one");
  list.add("two");
  list.add("three");
  PrintableList pl=new PrintableListAdapter();
  pl.printList(list);
  
 }
}

输出:

one two three