适配器模式

适配器模式说, 只是“将类的接口转换为客户端所需的另一个接口”。
换句话说, 在使用具有不同接口的类的服务时, 根据客户端需求提供接口。
【适配器模式】适配器模式也称为包装器。
适配器模式的优势

  • 它允许两个或多个以前不兼容的对象进行交互。
  • 它允许重复使用现有功能。
适配器模式的用法: 它用于:
  • 当对象需要利用具有不兼容接口的现有类时。
  • 当你要创建可重用的类并与没有兼容接口的类配合使用时。
  • 当你要创建可重用的类并与没有兼容接口的类配合使用时。
适配器样式示例
让我们通过上面的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 classimport 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 JaiswalEnter the account number:10001Enter the bank name :State Bank of IndiaThe Account number 10001 of Sonoo Jaiswal in State Bank of India bank is valid and authenticated for issuing the credit card.

    推荐阅读