gpt4 book ai didi

java - 灵活接口(interface)的设计模式

转载 作者:行者123 更新时间:2023-11-30 06:26:13 24 4
gpt4 key购买 nike

假设我有一个接口(interface) API 和实现该接口(interface)的类 FacebookAPI 和 FlickrAPI,

public interface API {
Photo getPhoto(int id);
Album getAlbum(int id);
}

package api;

import domainObjects.Album;
import domainObjects.Photo;

public class FacebookAPI implements API{

@Override
public Photo getPhoto(int id) {
// TODO Auto-generated method stub
return null;
}

@Override
public Album getAlbum(int id) {
// TODO Auto-generated method stub
return null;
}

}


import domainObjects.Album;
import domainObjects.Photo;

public class FlickrAPI implements API{

@Override
public Photo getPhoto(int id) {
// TODO Auto-generated method stub
return null;
}

@Override
public Album getAlbum(int id) {
// TODO Auto-generated method stub
return null;
}

}

问题是我只知道至少两个 API(facebook 和 flickr)都需要 photoId。现在假设要获取照片,FacebookAPI 除了 Id 之外还需要 AccessToken,而 FlickAPI 除了 photoId 之外还需要 APIKey + UserId。

我可以使用什么设计模式来解决这个问题?

最佳答案

创建一个 Credentials 抽象类,以通过具体的 API 实现进行扩展,并在方法契约中获取它。

public Album getAlbum(int id, Credentials c) {

和类似的

public FlickrCredentials extends Credentials {
String APIKey
String UserId
}

这只有在身份验证方法与更改参数(如 URL 参数)相似时才可行。抽象类应该指定实际使用值的方法的契约,例如:

public String buildToken();

例如可以实现为:

@Override
public String buildToken() {
return "APIKey="+getAPIKey()+"&UserId="+getUserId();
}

关于java - 灵活接口(interface)的设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14659358/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com