我正在尝试实现我的第一个工厂设计模式,我不确定在将工厂制造的对象添加到列表时如何避免使用instanceof.这就是我想要做的:
for (ABluePrint bp : bluePrints) {
AVehicle v = AVehicleFactory.buildVehicle(bp);
allVehicles.add(v);
// Can I accomplish this without using 'instanceof'?
if (v instanceof ACar) {
cars.add((ACar) v);
} else if (v instanceof ABoat) {
boats.add((ABoat) v);
} else if (v instanceof APlane) {
planes.add((APlane) v);
}
}
Run Code Online (Sandbox Code Playgroud)
从我在SO上看到的,使用'instanceof'是代码气味.有没有更好的方法来检查工厂创建的车辆类型而不使用'instanceof'?
我欢迎任何关于我的实施的反馈/建议,因为我不确定我是否正确地采用了这种方式.
完整示例如下:
import java.util.ArrayList;
class VehicleManager {
public static void main(String[] args) {
ArrayList<ABluePrint> bluePrints = new ArrayList<ABluePrint>();
ArrayList<AVehicle> allVehicles = new ArrayList<AVehicle>();
ArrayList<ACar> cars = new ArrayList<ACar>();
ArrayList<ABoat> boats = new …Run Code Online (Sandbox Code Playgroud) 我正在使用免费版本的 MUI 数据网格组件,但无法对在数组中呈现多个值的列进行过滤和排序以正确工作。在此示例中,我的多值数组列是“tags”,它显示数据网格中单词的一些类别。
\n所需的功能如下:
\n过滤:我希望用户能够从下拉列表中选择一个标签,并使表格仅显示包含该标签的行。让用户选择多个标签并匹配所有标签也是可以接受的,但这不是必需的。预期的过滤器菜单类似于:“列:标签,运算符:包含,值:[从所有可能标签的列表中选择一个或多个标签]”。
\n排序:这更容易解释,但至少,它应该对包含标签的所有行在不包含标签的行之前/之后进行排序。
\n下面是我到目前为止所拥有的,但我相信它不起作用,因为“singleSelect”列类型期望与单个字符串值而不是字符串数组进行比较。然而,浏览 MUI 文档,我无法找到相应的列/过滤器选项,该选项可以将下拉列表中的预定义值与相应字符串数组列中的任何一个值进行匹配。
\n\nimport { DataGrid, GridColDef, GridToolbar } from "@mui/x-data-grid"\nimport { Box, Chip, Stack } from "@mui/material"\n\nexport default function App() {\n const rows = [\n { id: 1, german: "der Kuchen", english: "cake", tags: ["food", "baked goods", "kitchen"] },\n { id: 2, german: "rot", english: "red", tags: ["colors"] },\n { id: 3, german: "das Auto", english: "car", tags: ["vehicles", "garage"] },\n { id: 4, …Run Code Online (Sandbox Code Playgroud) arrays ×1
datagrid ×1
factory ×1
instanceof ×1
java ×1
material-ui ×1
reactjs ×1
typescript ×1