适配器模式说, 只是“将类的接口转换为客户端所需的另一个接口”。
换句话说, 在使用具有不同接口的类的服务时, 根据客户端需求提供接口。
适配器模式也称为包装器。
适配器模式的优势
- 它允许两个或多个以前不兼容的对象进行交互。
- 它允许重复使用现有功能。
适配器模式的用法:
它用于:
- 当对象需要利用具有不兼容接口的现有类时。
- 当你要创建可重用的类并与没有兼容接口的类配合使用时。
- 当你要创建可重用的类并与没有兼容接口的类配合使用时。
适配器样式示例
让我们通过上面的UML图了解适配器设计模式的示例。
UML用于适配器模式:
适配器模式有以下规格:
- 目标接口:这是客户端将使用的所需接口类。
- 适配器类:此类是包装器类, 它实现所需的目标接口并修改Adaptee类中可用的特定请求。
- Adaptee类:Adapter类使用此类来重用现有功能并对其进行修改以达到所需的用途。
- 客户端:此类将与Adapter类进行交互。
以上UML的实现:
步骤1
创建一个CreditCard界面(目标界面)。
public interface CreditCard {
public void giveBankDetails();
public String getCreditCard();
}// End of the CreditCard interface.
第2步
创建一个BankDetails类(Adaptee类)。
// This is the adapter class.
public class BankDetails{
private String bankName;
private String accHolderName;
private long accNumber;
public String getBankName() {
return bankName;
}
public void setBankName(String bankName) {
this.bankName = bankName;
}
public String getAccHolderName() {
return accHolderName;
}
public void setAccHolderName(String accHolderName) {
this.accHolderName = accHolderName;
}
public long getAccNumber() {
return accNumber;
}
public void setAccNumber(long accNumber) {
this.accNumber = accNumber;
}
}// End of the BankDetails class.
第三步
创建一个BankCustomer类(Adapter类)。
// This is the adapter class
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class BankCustomer extends BankDetails implements CreditCard {
public void giveBankDetails(){
try{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.print("Enter the account holder name :");
String customername=br.readLine();
System.out.print("\n");
System.out.print("Enter the account number:");
long accno=Long.parseLong(br.readLine());
System.out.print("\n");
System.out.print("Enter the bank name :");
String bankname=br.readLine();
setAccHolderName(customername);
setAccNumber(accno);
setBankName(bankname);
}catch(Exception e){
e.printStackTrace();
}
}
@Override
public String getCreditCard() {
long accno=getAccNumber();
String accholdername=getAccHolderName();
String bname=getBankName();
return ("The Account number "+accno+" of "+accholdername+" in "+bname+ "
bank is valid and authenticated for issuing the credit card. ");
}
}//End of the BankCustomer class.
步骤4
创建一个AdapterPatternDemo类(客户端类)。
//This is the client class.
public class AdapterPatternDemo {
public static void main(String args[]){
CreditCard targetInterface=new BankCustomer();
targetInterface.giveBankDetails();
System.out.print(targetInterface.getCreditCard());
}
}//End of the BankCustomer class.
输出量
Enter the account holder name :Sonoo Jaiswal
Enter the account number:10001
Enter the bank name :State Bank of India
The Account number 10001 of Sonoo Jaiswal in State Bank of India bank is valid
and authenticated for issuing the credit card.
评论前必须登录!
注册