gpt4 book ai didi

java - 应用哪种设计模式

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:21 26 4
gpt4 key购买 nike

假设我们必须检索类数据:Trade。这个贸易类有很多参数,如A、B、C....

class A { retrieveTradeDataWithA(); and many more methods which do something }

class B { retrieveTradeDataWithB(); and many more methods which do something }

class LetsSaySomeResource {

@Inject
private A classAInstance;
@Inject
private B classBInstance;

public void getTradeDataBasedOnA(){
classAInstance.retrieveTradeDataWithA();
}
public void getTradeDataBasedOnB(){
classBInstance.retrieveTradeDataWithB();
}
}

现在的要求是我们要获取一些基于 A 和 B 的交易数据,稍后可能会添加更多类,如 A 和 B,以获取基于此的数据。如何使设计更灵活?

喜欢,

public void getDataBasedOnAandB(){
}

或者,稍后会出现 C 类,所以我不想继续注入(inject) A、B 等过滤器......有人可以帮忙吗?

最佳答案

首先创建一个接口(interface)来定义做某事的契约:

public interface IData {
void doSomething();
}

然后创建具体的实现来做一些事情:

public class DataA implements IData {

@Override
public void doSomething() {
// TODO Do something for A

}

}

public class DataB implements IData {

@Override
public void doSomething() {
// TODO Do something for B
}

}

最后是一个真正会做一些事情的类:

public class DataDAO {
private List<IData> dataList;

public DataDAO(List<IData> dataList) {
this.dataList = dataList;
}

public void doSomething() {
for(IData data : dataList) {
data.doSomething();
}
}
}

现在让我们来看看您的用例:

为A做点什么:

 List<IData> dataAList = new ArrayList<IData>();
dataList.add(new DataA());
DataDAO dataADAO = new DataDAO(dataAList);
dataADAO.doSomething();

为 A 和 B 做点什么:

 List<IData> dataAList = new ArrayList<IData>();
dataList.add(new DataA());
dataList.add(new DataB());
DataDAO dataADAO = new DataDAO(dataAList);
dataADAO.doSomething();

关于java - 应用哪种设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28145830/

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