个性化阅读
专注于IT技术分析

适配器模式

适配器模式说, 只是“将类的接口转换为客户端所需的另一个接口”。

换句话说, 在使用具有不同接口的类的服务时, 根据客户端需求提供接口。

适配器模式也称为包装器。


适配器模式的优势

  • 它允许两个或多个以前不兼容的对象进行交互。
  • 它允许重复使用现有功能。

适配器模式的用法:

它用于:

  • 当对象需要利用具有不兼容接口的现有类时。
  • 当你要创建可重用的类并与没有兼容接口的类配合使用时。
  • 当你要创建可重用的类并与没有兼容接口的类配合使用时。

适配器样式示例

让我们通过上面的UML图了解适配器设计模式的示例。

UML用于适配器模式:

适配器模式有以下规格:

  • 目标接口:这是客户端将使用的所需接口类。
  • 适配器类:此类是包装器类, 它实现所需的目标接口并修改Adaptee类中可用的特定请求。
  • Adaptee类:Adapter类使用此类来重用现有功能并对其进行修改以达到所需的用途。
  • 客户端:此类将与Adapter类进行交互。
适配器模式UML

以上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.
赞(0)
未经允许不得转载:srcmini » 适配器模式

评论 抢沙发

评论前必须登录!