我有一个问题我不明白。我有4个不同的JSON文件配置。其中一些文件需要额外的API调用,而另一些则不需要。
4文件BCD
A和B只是要求。
A.getConfigs ()
B.getConfigs ()
C需要
C.getConfigs ()
C.getCase ()
D需要
D.getConfigs ()
D.getHeader ()
当我还想为C和D调用单独的方法时,我应该使用什么样的模式/对象?
我可以很容易地将getCase和getHeader逻辑移动到客户端代码中,但后来我意识到我需要在应用程序代码的多个地方使用此逻辑。那我现在该怎么办呢?
您可能正在寻找facade模式,它旨在为更复杂的操作提供简化的接口。
我在这里冒昧地称它为facade,因为它通常涉及包装其他类,而不仅仅是实现一个接口,但我认为它仍然适用。
/* define facade interface */
interface Configurable {
void configure();
}
/* abstract basic configuration */
abstract class Config
implements Configurable
{
abstract void getConfigs();
void configure() {
getConfigs();
}
}
/* implementations */
class ConfigA
extends Config
{
void getConfigs() {
/* do stuff */
}
}
class ConfigB
extends Config
{
void getConfigs() {
/* do stuff */
}
}
class ConfigC
extends Config
{
void getConfigs() {
/* do stuff */
}
void getCase() {
/* do stuff */
}
/* override configure */
void configure() {
getConfigs();
getCase();
}
}
class ConfigD
extends Config
{
void getConfigs() {
/* do stuff */
}
void getHeader() {
/* do stuff */
}
/* override configure */
void configure() {
getConfigs();
getHeader();
}
}
/* usage */
class Client
{
private Config config;
Client(Config config) {
this.config = config;
}
void start() {
config.configure();
/* do more stuff */
}
}
然而,如果,正如你的方法名称所暗示的那样,getConfigs()
,getCase()
和getHeader()
应该返回客户端需要操作的值,那么事情可能会变得有点复杂,也许这种模式不会增加很多好处。
另外,我忽略了您希望能够单独调用C
和D
的方法,这在我的建议下仍然是可能的,但是如果您不打算同时使用getConfigs()
执行它们,那么我的想法可能不是您正在寻找的。