factory-pattern 相关问题

此标记有时用于引用工厂方法模式([factory-method]),有时用于引用抽象工厂模式([abstract-factory])。请使用这些标签中的任何一个而不是此标签。

如何推断类的类型,然后在运行时在C#中分配值?

我具有如下接口:公共接口IRequest {Guid RequestUId {get;组; } TicketSystemTypeEnum TicketSystemType {get;组; }}是由类Request,DeskPro,...

回答 1 投票 0

我将如何使用此Factory类,有什么用?

[这是我有史以来第一篇SO文章,对于C#来说,这是我的新手,我拥有大多数的数据库经验。我开始看一些我们的代码,并想了解我将如何使用此类和...

回答 1 投票 0

是否禁止在工厂模式中使用静态方法?

我被告知,在实现工厂方法模式时使用静态方法是错误的,应避免使用。因为我不太熟悉该模式,所以我接受了该答案。之后...

回答 3 投票 0

Unforgettable Factory:构造函数何时实例化?

我正在建立一个令人难忘的工厂。一切正常,但有一件事情:有时类未注册。我认为关键部分是Registrar ::注册成员。如果使用它,...

回答 1 投票 1

Java-如何使用枚举/工厂模式基于字符串调用对应类的方法

是的,我在网络上阅读了很多示例,但是我没有找到一种基于字符串值调用方法的方法。可能是我搜索方式不正确...我编写了所有代码,但不知道如何调用该方法。 ...

回答 2 投票 1

在工厂模式下使用通用时不兼容的类型

我想为我的服务应用工厂设计模式,以便我可以根据请求和响应来决定退回哪个服务。但是它不能正常工作,它说如...

回答 1 投票 0




有没有一种方法可以用更精确的方法替换此Visual Basic词典中的'Object'值类型?

我正在使用工厂从实现相同通用接口的多个服务中进行选择。我的工厂写成这样:Public Class JurisdictionServiceFactory Private ...

回答 1 投票 0

此工厂方法问题的最佳解决方案是什么>>

考虑以下继承层次结构公共接口SupperConf {} //空类ConfigurationA实现SupperConf {public void setProA(String proA){}}类ConfigurationB ...

回答 4 投票 0

字符减法和循环

我确实有许多序列,其中包含0,1,并且将其作为字符导入R。序列如下所示:'1000000000000000000010000100''1000000000001000000010100100''...

回答 1 投票 -1

Unity ScriptableObject Factory

我的工厂基于ScriptableObject(“ SO”)属性创建实例。我不想将我创建的每个新SO追加到Factory。因此理想情况下,类似于每个SO注册...

回答 1 投票 0

如何避免在工厂类中“级联if \ case”语句

我必须根据特定情况创建一个对象。我读到,解决方案可以是“工厂模式”,但就我而言,它有很多缺点。例如:我有一个应用程序...

回答 1 投票 1

如何在工厂类中解决“级联if \ case”语句

我必须根据特定情况创建一个对象。我读到解决方案可能是“工厂模式”,但就我而言,它有很多缺点。例如:我有一个应用程序,......>

回答 1 投票 1

如何在工厂类中解决“级联if \ case”语句

我必须根据特定情况创建一个对象。我读到解决方案可能是“工厂模式”,但就我而言,它有很多缺点。例如:我有一个应用程序,......>

回答 1 投票 1

如何解决工厂模式下的cascade \ case-of

我必须根据特定情况创建一个对象。我读到解决方案可能是“工厂模式”,但就我而言,它有很多缺点。例如:我有一个应用程序,......>

回答 1 投票 1

这两个函数声明在Javascript中有什么区别?

我对这两种javascript情况有些疑问:function some(){this.some2 = function(){//这与自己的对象相关联(正确吗?)console.log('some2'); }} var __s1 = new ...

回答 2 投票 0

输入根据参数应用mixin的Factory方法的返回值

正在尝试在TypeScript中创建Factory方法,该方法基于Factory方法的参数之一,创建一个应用了一些混合对象的类(实例)。这是从普通...

回答 1 投票 0

用于动态创建异常的工厂模式

我已经创建了Exception xml,并动态创建并抛出异常。 com.package.CheckedException ] >> 嗯,以科学的名义,这是您可以做到的方式。我会建议这样做吗?绝对不是。我自己会做任何远程的事情吗?可能不是。 public class ExceptionFactory { public static void throwException(String className) throws CheckedException, UncheckedException { Class<?> exceptionClass; try { exceptionClass = Class.forName(className); } catch (ClassNotFoundException e) { throw new IllegalArgumentException(e); } try { if (CheckedException.class.isAssignableFrom(exceptionClass)) { throw exceptionClass.asSubclass(CheckedException.class) .newInstance(); } else if (UncheckedException.class .isAssignableFrom(exceptionClass)) { throw exceptionClass.asSubclass(UncheckedException.class) .newInstance(); } else { throw new IllegalArgumentException( "Not a valid exception type: " + exceptionClass.getName()); } } catch (InstantiationException | IllegalAccessException e) { throw new IllegalStateException(e); } } public static void main(String... args) { try { throwException("CheckedException"); } catch (CheckedException e) { System.out.println(e); } catch (UncheckedException e) { System.out.println(e); } } } class CheckedException extends Exception { } class UncheckedException extends Exception { } 我看不出这家工厂的意义。即使您可以使用它(通过将所有异常作为单个祖先类的子类抛出),它的用法也将如下所示: .... if (somethingInWrong) { ExceptionFactory.throwException("SomeKey"); } .... 对于每个键,您仍然必须创建一个异常类以映射到它。可以说SomeKeyException是映射到“ SomeKey”的异常。 在那种情况下,简单地写就更安全了: .... if (somethingInWrong) { throw new SomeKeyException(); } .... 这样,编译器会检查您是否正在创建它实际上知道的异常类。如果使用Factory,则可能会使用不是有效密钥的某些String,并且编译器将无法对其进行任何处理。只有在运行时,您的Factory才会找不到映射到无效密钥的异常。 一些调整: public static void throwException(final String key) throws Throwable { ExceptionMapping exceptionMapping = exceptionMappings.getExceptionMappings().get(key); if (exceptionMapping != null) { try { Class<Throwable> exceptionClass = (Class<Throwable>)Class.forName(exceptionMapping.getClassName()); try { throw exceptionClass.cast( exceptionClass.newInstance() ); // line X } catch (InstantiationException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } catch (ClassNotFoundException e) { e.printStackTrace(); } } } 无需使用反射(正如我在you shouldn't use reflection unless you really have to...上面所说的那样)。 您可以将异常类实现为如下形式: class MyExceptions { static void myExceptionsThrower(String key) throws Exception { if("illegalstate".equals(key)) { throw new IllegalStateException("that's my IllegalStateException bro!"); } else if("illegalaccess".equals(key)) { throw new IllegalAccessException("that's my IllegalAccessException bro!"); } // etc... } } 并用于: MyExceptions.myExceptionsThrower(key); 这是我参加这场德比大赛的机会。 :-) [其他答案已评论了这是否是合理的设计。为了解决这个问题,我将这些问题放在一边。 我的一些烦恼是不必要的警告(即使被压制了),并且没有报告实际出问题的异常。特别是仅打印出堆栈跟踪通常是不够的。是的,这只是测试代码,但是在处理这样的代码(甚至是旨在引发异常的代码)时,人们真的应该考虑如何处理错误。在这种情况下,我选择将这些类型的错误表示为InternalError的实例,因为配置或任何可能以多种方式出错的错误。具体来说:如果找不到该类,则找到该类,但该类不是CheckedException或UncheckedException的子类型(甚至不是普通类),或者没有no-arg构造函数,或者无法访问。 某些建议的解决方案的另一个问题是,如果异常类名称为"java.lang.InstantiationException"(或其他内部捕获的异常之一),则可能在内部构造,引发然后捕获该异常类型的实例,从而导致在堆栈跟踪中,但实际上并未引发请求的异常。我通过线性化逻辑而不是嵌套try-catch块来避免这种情况。 最后,我将创建异常的代码提取到单独的方法中,以便可以将它用于已检查和未检查的情况。如果重新排列异常层次结构以仅允许单个根异常(我建议不选中)并且具有在Web层处理或扔给调用者的异常子类型,则可以大大简化此过程。 static void throwException(final String exClassName) throws CheckedException, UncheckedException { Class<?> clazz; try { clazz = Class.forName(exClassName); } catch (ClassNotFoundException cnfe) { throw new InternalError(exClassName, cnfe); } if (CheckedException.class.isAssignableFrom(clazz)) { throw newException(clazz.asSubclass(CheckedException.class)); } else if (UncheckedException.class.isAssignableFrom(clazz)) { throw newException(clazz.asSubclass(UncheckedException.class)); } else { throw new InternalError(exClassName + " is not a valid exception"); } } static <X extends Throwable> X newException(Class<X> clazz) { X x; try { x = clazz.newInstance(); } catch (InstantiationException|IllegalAccessException e) { throw new InternalError("creating instance of " + clazz, e); } return x; } 这可能是帮助 ,以创建自定义先决条件例外,以避免如果条件多则]。在检查null 指针时创建前提条件异常。 class Preconditions { /** * <p> * Checks the value to be null and if null throws a new Exception with the message given. * Used to reduce checking if conditions for complexity. * </p> * @param val - val to check null * @param exceptionClass - exception class to be thrown * @param args - message to be called for throwing exception * @throws Throwable - Common Throwable Exception. */ public static void checkNotNull(final Object val, final Class<?> exceptionClass, final Object ...args) throws Throwable { Class<?>[] argTypes = new Class<?>[args.length]; Arrays.stream(args).map(WithIndex.indexed()).forEach(arg ->argTypes[arg.index()] = arg.value().getClass()); if (null == val) throw (Throwable) exceptionClass.getConstructor(argTypes).newInstance(args); } } 然后您可以在代码中使用它: PreConditionUtil.checkNotNull(objectToCheck, CustomException.class, ErrorCode, "your error message", ...);

回答 6 投票 8

© www.soinside.com 2019 - 2024. All rights reserved.