我正在学习GoF Java设计模式,我想看看它们的一些真实例子.Java核心库中这些设计模式的一些很好的例子是什么?
工厂和抽象工厂模式之间的基本区别是什么?
我正在从网站上阅读设计模式
在那里我读到了有关工厂,工厂方法和抽象工厂的信息,但它们很混乱,我对定义并不清楚.根据定义
Factory - 创建对象而不将实例化逻辑暴露给客户端,并通过公共接口引用新创建的对象.是Factory Method的简化版本
工厂方法 - 定义用于创建对象的接口,但让子类决定实例化哪个类,并通过公共接口引用新创建的对象.
抽象工厂 - 提供用于创建相关对象族的界面,而无需明确指定其类.
我还查看了关于抽象工厂与工厂方法的其他stackoverflow线程,但是那里绘制的UML图使我的理解更加糟糕.
有谁能告诉我
java language-agnostic design-patterns factory factory-method
Class.forName()和之间有什么区别Class.forName().newInstance()?
我不明白这个显着的区别(我已经读过一些关于它们的东西!).请你帮助我好吗?
我已经做了几年的Java SE并继续使用Java EE.但是我在理解Java EE的某些方面时遇到了一些麻烦.
Java EE只是一个规范吗?我的意思是:EJB Java EE?
EJB/Spring是不同的Java EE实现?
很抱歉,但是我很难理解Java EE是什么.有人能解释一下Java EE是什么吗?和EJB?
当我在JSF中学习自定义组件开发时,我对组件系列,组件类型和渲染器类型之间的关系感到困惑.例如,我注册了一个渲染器和一个自定义组件,如下所示.
faces-config.xml:
<component>
<component-type>study.faces.Div</component-type>
<component-class>javax.faces.component.UIPanel</component-class>
</component>
<render-kit>
<render-kit-id>HTML_BASIC</render-kit-id>
<renderer>
<component-family>javax.faces.Panel</component-family>
<renderer-type>study.faces.DivRenderer</renderer-type>
<renderer-class>com.study.ui.DivRenderer</renderer-class>
</renderer>
</render-kit>
Run Code Online (Sandbox Code Playgroud)
我还在my.taglib.xml文件中注册了一个新标签,如下所示:
<tag>
<tag-name>div</tag-name>
<component>
<component-type>study.faces.Div</component-type>
<renderer-type>study.faces.DivRenderer</renderer-type>
</component>
</tag>
Run Code Online (Sandbox Code Playgroud)
这种配置非常有效.但是,我不明白为什么<component-family>javax.faces.Panel</component-family>在渲染器注册时需要该行.在my.taglib.xml,组件和渲染器是连接的,恕我直言,它应该足以为组件选择合适的渲染器.附加参数的用途是什么<component-family>?
我做了谷歌研究,我得到的所有答案都说"一个渲染器可以用来渲染多个组件.这些组件属于一个系列".但这些陈述并没有明确我的困惑.有人可以解释组件类型,组件系列和渲染器选择策略之间的关系吗?(希望有一个很好的例子.)
我被告知加载JDBC驱动程序的首选方法是:
Class.forName(driverName);
Run Code Online (Sandbox Code Playgroud)
我理解这对于从XML配置文件或用户输入读取的多个驱动程序之间的动态决策更好.我很好奇的是,如何调用此语句将指定的驱动程序加载到我们甚至不在任何地方存储结果"类"对象的环境中.JavaDocs条目说:
public static Class forName(String className)
throws ClassNotFoundExceptionReturns
Run Code Online (Sandbox Code Playgroud)
返回与具有给定字符串名称的类或接口关联的Class对象
在这种情况下,Java开发人员如何仅通过此语句设法促进驱动程序对象的存在?
我已经开始研究JSF了,我想知道在我们的类路径中包含什么是JAR以开始使用JSF.难道jsf-api还是jsf-impl?或者我们必须包括两者?如果它们都是为什么他们没有合并?
我一年以来一直在使用工厂模式.有时我只觉得真正的优势就是干净的代码.让我解释,
interface A {
public void test();
}
class B implements A {
public void test() {
}
}
class C implements A {
public void test() {
}
}
class Factory {
public static A getObject(String name){
if(name.equalsIgnoreCase("B")){
return new B();
}else if(name.equalsIgnoreCase("C")){
return new C();
}
return new B();
}
}
public class Test {
public static void main(String[] args) {
A a = Factory.getObject(args[0]);
// if i dint use factory pattern
A nofactory=null;
if(args[0].equalsIgnoreCase("B")){
nofactory= new B(); …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Wildfly 服务器上的旧版 Java EE 应用程序升级到 Jakarta EE 8。由于 8 尚未将软件包名称交换为 jakarta,因此大部分升级都很顺利。但是,我们的一些代码使用 Oracle com.sun.faces 包中的类。这些类似乎包含在 Jakarta EE Faces API规范中,但当我使用以下 Maven 依赖项时,它们不包含在我们的项目中:
<dependency>
<groupId>jakarta.faces</groupId>
<artifactId>jakarta.faces-api</artifactId>
<version>2.3.2</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
为了将它们放入类路径中,我必须使用 Oracle 依赖项:
<dependency>
<groupId>com.sun.faces</groupId>
<artifactId>jsf-impl</artifactId>
<version>2.2.20</version>
<scope>provided</scope>
</dependency>
Run Code Online (Sandbox Code Playgroud)
显然,我们希望在某个时候完全放弃使用这个包,但我希望有一种方法可以将其包含在我们的雅加达迁移中。
我已经将JAVA应用程序与MySql连接.当我编写PreparedStatement时ps = null; 然后显示了导入包的两个选项.两个建议的包是:com.mysql.jdbc.PreparedStatement; 和java.sql.PreparedStatement.并且,当我导入com.mysql.jdbc.PreparedStatement包时,他们说如下所示进行转换.
ps = (PreparedStatement) con.prepareStatement("INSERT INTO Authors(Name) VALUES(?)");
Run Code Online (Sandbox Code Playgroud)
而当我使用java.sql.PreparedStatement时不需要在上面的句子中进行转换.
所以,我的问题是:为什么两个不同的导入包显示?以及为什么需要com.mysql.jdbc.PreparedStatement包的转换?