gpt4 book ai didi

java - 在 Java/JSP 中寻找一个很好的模式来实现对象的 View 适配器

转载 作者:行者123 更新时间:2023-11-29 09:23:10 25 4
gpt4 key购买 nike

这更像是一个设计问题。假设您有许多 bean A、B、C...。那么您有一个类可以用 bean 创建表。您需要一些东西来告诉此类要显示这些 bean 的哪些属性、列的名称和其他呈现属性。我不想在每个 bean 类的类中硬连线它,所以我正在考虑为 bean 提供一个公共(public)接口(interface),如 TableAdapterProvider,它会产生一个向呈现类提供所有指令的类。问题是我不能在 Java 中使接口(interface)方法静态化。由于多种原因,这看起来不是很干净……例如,要创建一个空表,我必须分配一个 bean,然后调用接口(interface)方法 TableAdapterProvider 来检索“呈现”类。

我想创建一个像 TableAdapterFactory(Class beanClass) 这样的工厂,它为每个 bean 类返回正确的 TableAdapter 而无需实例化任何类。无论如何,我必须为我创建的每个 bean 更新这个工厂。

另一种解决方案可以使用特殊的命名约定,例如,如果 bean 名称是 Apple,那么 AppleTableRenderer 将成为渲染器。当 TableRenderer 启动时,我可以扫描一个包来搜索它,这样关联就会自动完成。

你知道更好的模式吗?您如何看待我的方法?

对于 future ,是否有一本包含此类食谱的好书可用于网络应用程序?

最佳答案

在我看来,任何需要显示为 HTML 表格(通过某种 TableRenderer )的 bean(A、B、C..)都应该实现一个接口(interface),为渲染器提供所需的信息。可能的接口(interface)方法将获取列标题和表格数据。也许还有一个用于表格样式,但这有点主观。

考虑到这一点,您可能会;

public interface Renderable
{
public List<String> getHeaders();
public List<List<String>> getData();
}

public class A implements Renderable
{
private String name;
private int age;

public List<String> getHeaders()
{
List<String> headers = new ArrayList<String>();
headers.add("Name");
headers.add("Age");
return list;
}

public List<List<String>> getData()
{
List<List<String>> data = new ArrayList<List<String>();
List<String> row = new ArrayList<String>();
row.add(name);
row.add(String.valueOf(age));
data.add(row);
return data;
}

//getters and setters

}

那么写你的 TableRenderer 就很简单了;

public class TableRenderer
{
public String render(Renderable r)
{
//draw a HTML table
//draw table headers from r.getHeaders()
//draw table rows from r.getData()
}
}

请注意,不要写 TableRenderer您可能想要使用 JSTL 的类 <c:forEach>语法,这是一种更标准的方法。

关于java - 在 Java/JSP 中寻找一个很好的模式来实现对象的 View 适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4884761/

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