Tag: 工厂

带inheritance的工厂方法模式的好方法

假设我有以下类层次结构: class abstract Parent{} class FirstChild extends Parent {} class SecondChild extends Parent {} 我想从每个孩子创建DTO对象: class abstract ParentDTO {} class FirstChildDTO extends ParentDTO{} class SecondChildDTO extends ParentDTO{} 我想我需要一个像这样的工厂方法: ParentDTO createFrom(Parent source); 有没有很好的方法在没有instanceof检查和if / else语句的情况instanceof在Java中执行此操作? 编辑 :此工厂方法不起作用: public ParentDTO create(Parent source) { return _create(source); } private FirstChildDTO _create(FirstChild source) { return new FirstDTO(); } private SecondChildDTO […]

如何在TestNG中生成具有不同名称的测试?

我正在使用TestNG在Java中运行基于Selenium的测试。 我有一堆重复测试。 通常,除测试名称和一个参数外,它们都是相同的。 我想自动生成它。 我在考虑使用工厂。 有没有办法生成不同名称的测试? 最好的办法是什么? 至于现在我有类似下面的东西,我想创建像LinkOfInterestIsActiveAfterClick这样的10个测试 @Test(dependsOnGroups=”loggedin”) public class SmokeTest extends BrowserStartingStoping{ public void LinkOfInterestIsActiveAfterClick(){ String link = “link_of_interest”; browser.click(“*”,link); Assert.assertTrue(browser.isLinkActive(link)); } } 我的XML套件是从Java代码自动生成的。 测试名称对于记录哪个链接处于活动状态以及哪个链接不活动至关重要。

为什么Java Pattern类使用工厂方法而不是构造函数?

在一般情况下 ,对此进行了很好的讨论。 但是,我特别想知道为什么Pattern类使用compile静态方法来创建一个对象,而不是构造函数? 在我看来使用构造函数更直观。

简单的Java“服务提供者框架”?

我指的是有效Java第2章中讨论的“服务提供者框架”,这似乎是处理我遇到的问题的正确方法,我需要在运行时基于要选择的String实例化几个类中的一个哪个服务和一个Configuration对象(本质上是一个XML片段): 但是,我如何让各个服务提供商(例如一堆默认提供商+一些自定义提供商)进行自我注册? interface FooAlgorithm { /* methods particular to this class of algorithms */ } interface FooAlgorithmProvider { public FooAlgorithm getAlgorithm(Configuration c); } class FooAlgorithmRegistry { private FooAlgorithmRegistry() {} static private final Map directory = new HashMap(); static public FooAlgorithmProvider getProvider(String name) { return directory.get(serviceName); } static public boolean registerProvider(String name, FooAlgorithmProvider provider) { if […]

如何在Java中打包工厂

我想知道如何在我的应用程序中打包我的工厂。 工厂应该与使用它的类在同一个包中,与它创建的对象在同一个包中还是在它自己的包中? 感谢您的时间和反馈

在工厂模式中使用reflection

在工厂模式中使用Reflection是一个好习惯吗? public class MyObjectFactory{ private Party party; public Party getObject(String fullyqualifiedPath) { Class c = Class.forName(fullyqualifiedPath); party = (PersonalParty)c.newInstance(); return party; } } PersonalParty实现派对

没有switch语句的Java工厂

我正在尝试构建一个工厂对象,但是在使用Java编写一个很好的方法时遇到了麻烦。 我正在编写的应用程序用于处理各种格式的文件,因此有一个CodecInterface适用于所有用于读写文件的类。 我们假设它定义了以下方法。 这些文件中的每一个都具有唯一的人指定ID字符串,用于id’编码器\解码器。 String read(); void write(String data); String getID(); 工厂类将有一个create方法,用于创建这些编解码器类的实例。 我想方法签名看起来像这样。 static CodecInterface CodecFactory.create(String filename, String codecid, String args); filename是要读/写的文件的名称,codecid是指示要使用的编解码器的唯一ID。 args参数是传递给正在生成的解码器/编码器对象的参数字符串。 返回的应该是所请求的编解码器对象的实例。 我见过的所有Factory示例通常在create方法中都有一个switch语句,它创建一个依赖于ID的对象实例。 我想避免这样做,因为它似乎不是’正确’的方式,它也意味着除非你修改create方法,否则列表或多或少是固定的。 理想情况下,我想使用像字典(由编解码器ID索引)的东西,其中包含可用于创建我想要的编解码器类的实例的东西(我将称之为神秘类ClassReference)。 再次使用一些准java代码,这就是我所想的创建方法的主体。 static Dictionary; static CodecInterface CodecFactory.create(String filename, String codecid, String args); { ClassReference classreference; classreference = codeclibrary(codecid); return classreference.instanceOf(args); } ID的字典很容易,但我无法弄清楚ClassReference应该是什么。 Class Reference应该允许我创建所需类的实例,如上例所示。 从在线浏览,类方法和instanceOf似乎朝着正确的方向前进,但我没有找到任何将两者放在一起的东西。 作为一个额外的复杂性,正在创建的对象的构造函数将具有参数。 任何有关我应该看的内容的提示都将不胜感激。 提前致谢。 解 […]

java中使用generics的工厂方法模式,如何?

我的代码如下所示: public interface BaseDAO{ // marker interface } public interface CustomerDAO extends BaseDAO{ public void createCustomer(); public void deleteCustomer(); public Customer getCustomer(int id); // etc } public abstract class DAOFactory { public BaseDAO getCustomerDAO(); public static DAOFactory getInstance(){ if(system.getProperty(“allowtest”).equals(“yes”)) { return new TestDAOFactory(); } else return new ProdDAOFactory(); } public class TestDAOFactory extends DAOFactory{ public […]

弹簧动态注塑,工厂般的图案

从dependency injection的延续,延迟注射实践 。 我有Main课程: package test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.stereotype.Component; import java.util.List; import java.util.Scanner; @Component public class Main { @Autowired private StringValidator stringValidator; @Autowired private StringService stringService; @Autowired private ValidationService validationService; public void main() { scanKeyboardCreateLists(); stringValidator.validate(); final List validatedList = stringValidator.getValidatedList(); for (String currentValid : validatedList) { System.out.println(currentValid); } } […]

如何制作类的ArrayList?

如何将一堆类添加到ArrayList ,然后从ArrayList检索一个Class(派生自,但不是MyBaseClass )并使用它来生成检索到的实际Class的新对象(即不是MyBaseClass因为那样是抽象的) 所有需要添加的类都派生自相同的抽象基类( MyBaseClass ) 我真的想不出另一种方法来实现我想做的事情,所以希望这是可能的……?