轉接器模式這裡使用的方式會應用在,假設欲讀取第三方所提供的資料給己用,可是無法因為對方所提供的格式不符合,而去更改對方的code。相對地也不會調整自己讀取格式,因此會定義一轉接器來轉接對方所提供的資料,以此達到符合己用的格式!
轉接器模式需要定義的角色如下:
Target - 在此定義一介面表示需要定義的行為
Adaptee - 再來是表示需要被使用的第三方資源
Adapter - 轉接器本身需要做的動作
在此以成績單產生器來解釋轉接器模式的使用範例
相關程式碼如下:
#Target - 定義成績單產生器需操作的行為
#Adaptee - Third Party成績單產生的方式
#Adapter - 將Third Party輸出的內容轉接成新格式
在此說明Adapter將third party傳過來的list<Transcript>轉換成String[]格式
#Main - 主程式生成Adapter實體
DEMO如下:
2 Ben Male 87 91 80
1 Sjkok Female 94 99 65
3 Aaron Male 44 55 100
4 Zhibin Male 77 88 66
轉接器模式需要定義的角色如下:
Target - 在此定義一介面表示需要定義的行為
Adaptee - 再來是表示需要被使用的第三方資源
Adapter - 轉接器本身需要做的動作
在此以成績單產生器來解釋轉接器模式的使用範例
相關程式碼如下:
#Target - 定義成績單產生器需操作的行為
package adapter.target;
public interface ITranscript {
/**
* return string array. String format: Id\tName\tSex\tChinese\tMath\tEnglish
* @return
*/
public String[] getTranscript();
}
#Adaptee - Third Party成績單產生的方式
package adapter.adaptee;
import java.util.ArrayList;
import java.util.List;
public class ThirdPartyTranscript {
public List<Transcript> generateTranscript(){
List<Transcript> studentList = new ArrayList<Transcript>();
studentList.add(new Transcript(2,"Ben", "Male", 87, 91, 80));
studentList.add(new Transcript(1,"Sjkok", "Female", 94, 99, 65));
studentList.add(new Transcript(3,"Aaron", "Male", 44, 55, 100));
studentList.add(new Transcript(4,"Zhibin", "Male", 77, 88, 66));
return studentList;
}
public class Transcript{
private int id;
private String name;
private String sex;
private int chinese;
private int math;
private int english;
public Transcript(int id, String name, String sex, int chinese, int math, int english) {
super();
this.id = id;
this.sex = sex;
this.name = name;
this.chinese = chinese;
this.math = math;
this.english = english;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public int getChinese() {
return chinese;
}
public int getMath() {
return math;
}
public int getEnglish() {
return english;
}
public String getSex() {
return sex;
}
}
}
#Adapter - 將Third Party輸出的內容轉接成新格式
package adapter;
import adapter.adaptee.ThirdPartyTranscript;
import adapter.adaptee.ThirdPartyTranscript.Transcript;
import adapter.target.ITranscript;
public class TranscriptAdapter implements ITranscript{
private final String delim = "\t";
@Override
public String[] getTranscript() {
// TODO Auto-generated method stub
return new ThirdPartyTranscript().generateTranscript()
.stream()
.map(t -> getTranscriptStr(t))
.toArray(String[]::new);
}
private String getTranscriptStr(Transcript t) {
StringBuilder builder = new StringBuilder();
return builder.append(t.getId()).append(delim)
.append(t.getName()).append(delim)
.append(t.getSex()).append(delim)
.append(t.getChinese()).append(delim)
.append(t.getMath()).append(delim)
.append(t.getEnglish()).toString();
}
}
在此說明Adapter將third party傳過來的list<Transcript>轉換成String[]格式
#Main - 主程式生成Adapter實體
package adapter.main;
import adapter.TranscriptAdapter;
//import adapter.sample.TranscriptSample;
import adapter.target.ITranscript;
public class TranscriptGens {
public static void main(String[] args) {
// TODO Auto-generated method stub
//displayTranscript(new TranscriptSample());
displayTranscript(new TranscriptAdapter());
}
public static void displayTranscript(ITranscript t) {
String[] trans = t.getTranscript();
for(String tr : trans) {
System.out.println(tr);
}
}
}
DEMO如下:
2 Ben Male 87 91 80
1 Sjkok Female 94 99 65
3 Aaron Male 44 55 100
4 Zhibin Male 77 88 66
留言
張貼留言