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