当前位置: 首页 > 知识库问答 >
问题:

我需要使用哪种设计模式来使用Java应用程序

阎弘
2023-03-14

目前我有3个类,其中大多数变量是相同的。所有变量都有getter和setter。我需要根据提供的数据类型变量Year创建类的对象,并在十多个方法中传递该对象。让我们举个例子。

我们有三个班,A班,B班,C班。如果我们通过2017年,那么我需要ClassA的目标。如果我们通过2016年,那么我需要B类的目标,而对于所有其他年份,我们需要C类的目标。

然后,我们需要在所有10个方法中传递该对象。让我们举两种方法的例子。

公共无效方法1(int a,int b,类A/B/C的对象)。

公共无效方法2(int a,int b,类A/B/C的对象)。

这两种方法都是处理对象和在对象中设置一些变量。

但一个问题是,我不想在ClassA、ClassB、ClassC中扩展类或实现接口,因为ClassA、ClassB、ClassC是从XSD文件生成的,我不想在类中更改。

请让我知道的设计模式,我的要求完美。

共有3个答案

濮阳鸿祯
2023-03-14

不使用接口或扩展另一个类确实限制了编译器确保代码安全的能力。

您可以通过创建10个方法来解决这个问题,以便它们接收一个普通对象,然后使用反射来指定所需的值。

但是,您应该检查传递给您的方法的无效参数(即:检查类是否在可接受的类列表中),或者至少确保您接收的对象具有适当的成员(setters)。

邹昊
2023-03-14

如果您试图了解设计模式,那么您需要一个抽象对象实例化的创造性模式。这可以通过工厂模式实现。

您的第二个要求与使用工厂模式的目的背道而驰,因为调用方(通过工厂请求对象的人)可能仍然需要知道实际的实例类型,以便将参数传递给10(已经众所周知的方法)

暨修洁
2023-03-14

要根据过去的年份创建任何类A/B/C的实例,可以使用factory模式。这应该很直截了当。

问题的第二部分是将类A、B、C的对象传递给一些方法。这可以通过两种方式来实现。

如果你的类是相关的,即它们实现了一些公共接口或抽象类,你可以编码你的方法来接受接口或抽象类

public class A implements ICommonInterface {}
public class B implements ICommonInterface {}
public class C implements ICommonInterface {}

public void method1(int a, int b, ICommonInterface object){}

或者它们扩展了一些公共类

public class A extends CommonClass {}
public class B extends CommonClass {}
public class C extends CommonClass {}


public void method1(int a, int b, CommonClass object){}

如果不是这样,您可以让您的方法接受泛型类型

public void method1(int a, int b, T object){}

因为所有类都有相同的变量,所以使用这两种方法都不会有任何问题。

 类似资料:
  • 我编写了一个程序来解析XML文件,以获取一个名为SerialNum的特定标记值,该值包含在Header标记中。该文件的构造如下: < li >它包含一个标题和一个正文 < li >标题可能包含许多SerialNum标签。我们需要提取最后一个标签的值。 我使用Stax解析器获取SerialNum值,并编写了以下代码: 此代码提取所需的值,但代码质量不是很好:它不容易阅读和维护。它包含一个开关案例,如

  • 我有一个vehicle类,还有一个很好的隐含的船和飞机来检查安全性,每个类都实现了自己的SafetyCheck。世界很好。 但很快就需要一种叫做水上飞机的混合体,它重复了和的安全检查 在这样的特定场景中,哪些设计模式有助于减少代码冗余并使实现更干净?

  • 我目前正在使用HibernateConstraintValidator来实现我的验证。但是我的审阅者不喜欢在代码或!运算符中使用if/其他。我可以使用哪种设计模式来删除验证逻辑中的if/其他? 在下面的代码中,他不想要if/否则 附带说明:我们必须使用域驱动设计(如果有帮助的话)

  • 本文向大家介绍使用HTML5需要遵守哪些设计原则?相关面试题,主要包含被问及使用HTML5需要遵守哪些设计原则?时的应答技巧和注意事项,需要的朋友参考一下 合适的使用语义化标签 合适指合适的场景,如: 1、自然语言表达能力的补充; 2、适合机器阅读的整体结构

  • 我正在用一个需要JPA(classes)的项目测试Java9。当我添加<code>模块信息时。java并声明我的模块,包变得不可用。 我搜索了很多,但找不到在Java9模块项目中使用JPA所需的模块。 更新 正如艾伦建议的那样,我跑了 但还是有了这个 我得到“module-info.java:[3,18] module not found: java.persistence”。 更新2这是我的项目