标签: factory

SystemVerilog:向工厂注册 UVM 测试

我对以下用于向工厂注册 UVM 测试的 SystemVerilog 构造感到困惑:

class random_test extends uvm_test;
    `uvm_component_utils(random_test);
    ...
    function new (...
Run Code Online (Sandbox Code Playgroud)

这里我们有一个类的定义random_test,在定义内部我们调用一个方法,而它的参数是正在定义的类。

这是我的问题:

  1. `uvm_component_utils甚至在 random_test 类构造任何对象之前是否在时间 0 调用?
  2. 我们如何`uvm_component_utils在该类定义中传递一个类?

factory class system-verilog uvm

2
推荐指数
1
解决办法
2199
查看次数

Spring - 只需创建 Supplier<MyPrototypeBean>

我找不到一个好的和简单的解决方案来解决我关于不同 bean 生命周期的问题。

我想注入一个

@Resource
private Supplier<MessageHandler> messageHandlerFactory;
Run Code Online (Sandbox Code Playgroud)

@Servicebean来创建一个新的MessageHandler实例(原型,用自己的依赖),我每次通话时长messageHandlerFactory.get();

我发现的名为Method Injection的解决方案对于这样一个常见的任务来说似乎过于复杂和繁琐。

使用@Configuration类的最短和最干净的解决方案是什么?

== 更新 ==

我刚刚意识到 Supplier 应该是JSR-330 中定义的Provider

spring factory dependency-injection prototype factory-pattern

2
推荐指数
1
解决办法
2891
查看次数

使用装饰器的动态方法创建者的python setattr

我有一个定义了多个方法的类。

import mat
class Klass(object):

    @mat.sell(mat.CanSet):
    def method1(self):
        return None

    @mat.sell(mat.CanSet):
    def method2(self):
        return 'value2'
Run Code Online (Sandbox Code Playgroud)

假设我有10种方法需要填充此“ Klass”。我想生成这些方法而不显式地编写它们。所以我想做一个为每种方法做setattr的工厂。问题是我遵循以下方法,并且last方法具有最后一个值。每个都没有获得其相关的值,而是value10。另外下面的解决方案没有实现装饰器,我不知道如何分配装饰器

class Klass(object):
    pass

list1 = [('method1', 'value1'), ('method2', 'value2').....('method10', 'value10')]

for each in list1:
    method_name, method_value = each
    setattr(Klass, method_name, lambda self: method_value)
Run Code Online (Sandbox Code Playgroud)

所以当我跟随时...

k = Klass()
print k.method1(), method2()...., method10()
Run Code Online (Sandbox Code Playgroud)

每种方法的结果均为value10。不明白为什么 ?另外,任何人都可以帮助您实现具有一个属性的装饰器吗?附言:如果您有建议不要使用“ setattr”,那也将受到欢迎。

python factory decorator setattr python-decorators

2
推荐指数
2
解决办法
1646
查看次数

在 Python 中的类方法中创建实例

我正在尝试创建DataType类来反映 SQL 数据库中的数据类型。由于数据类型需要不同等信息sizeprecision等不同参数需要创建实例时被指定。

我希望能够用类似的东西来调用它DataType.createVarChar(size, charSet)。到目前为止,我已经编写了下面的代码,但我不确定这是否是正确的方法,因为我最初是在开始时创建一个对象而不提供任何信息。

在这种情况下,正确的设计是什么?

class SQLDatatype(Enum):
    UNSUPPORTED,
    VARCHAR


class DataType(object):

    def __init__(self, dataType=None, precision=None, scale=None, size=None, charSet=None):
        self.dataType = dataType
        self.precision = precision
        self.scale = scale
        self.size = size
        self.withLocalTimezone = withLocalTimezone
        self.charSet = charSet

    def createVarChar(self, size, charSet):
        return Datatype(dataType=SQLDataType.VARCHAR, size=size, charSet=charSet)
Run Code Online (Sandbox Code Playgroud)

python oop factory initialization class

2
推荐指数
1
解决办法
1710
查看次数

如何对依赖于Factory的代码进行单元测试

我有一个像下面这样的DataService类

public class LessonDataService
{

    IUnitOfWork unitOfWork = UnitOfWorkFactory.CreateUnitOfWork();

    public Lesson FindById(int id)
    {
        try
        {
            return unitOfWork.Lessons.FindById(id);
        }
        catch (Exception ex)
        {
            throw exception;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如您所见,UnitOfWork是在DataService类中构造的.我也不希望通过构造函数传递UnitOfWork,我不希望UI代码打扰UnitOfWork我只是想让它调用DataService类并让它完成剩下的工作.有任何想法吗?

c# unit-testing factory

2
推荐指数
1
解决办法
455
查看次数

如何在工厂方法之外禁用创建/复制 obj?

我有一个类,它的负载非常重,因此创建/复制/移动此类的实例非常昂贵。由于应用程序完成初始化后它们不会改变,因此无需创建此类的临时对象。我只需要在容器(std::map)中缓存对象,并在需要时提供“常量引用”。

必须强调的一点是,我正在寻找一种解决方案,可以在将对象添加到容器之前避免双重创建或不必要的复制(我不认为像 @getsoubl 提出的解决方案可以解决问题,因为它不会消除双重创建或不必要的复制)。

因此,我想将构造函数方法安排到类主体的“私有/受保护”部分,以禁止在“工厂方法”之外进行任何创建/复制/移动。以下是我的原始解决方案:

class MyClass {
public:
   // methods of the class
   static const MyClass & findObject( int iKey ) {
      auto pair = mapObjects.try_emplace( iKey, iKey );
      if ( pair.second )
         cout << "New object has been created" << endl;

      return pair.first->second;
   };

   // deleted
   MyClass() = delete;
   MyClass( MyClass & ) = delete;
   MyClass( MyClass && ) = delete;
   MyClass( const MyClass & ) = delete;
   MyClass( const MyClass && ) = delete;
   MyClass …
Run Code Online (Sandbox Code Playgroud)

c++ factory factory-pattern move-constructor emplace

2
推荐指数
1
解决办法
120
查看次数

如何让 DjangoModelFactory 创建模型而不将其保存到数据库?

我正在 Django 项目中编写单元测试。我有一个使用该.create()方法创建对象的工厂。所以在我的单元测试中,我使用了这个:

device = DeviceFactory.create()
Run Code Online (Sandbox Code Playgroud)

不过,这总是会在数据库中创建一条记录。有没有办法让工厂创建一个对象而不将它保存到数据库?

我查看了文档,但找不到。我错过了什么吗?

python django unit-testing factory factory-boy

2
推荐指数
1
解决办法
1536
查看次数

使用字符串与枚举作为工厂方法的参数?

我最近正在阅读这个博客https://blog.cleancoder.com/uncle-bob/2021/03/06/ifElseSwitch.html这段让我很困惑:

小心那个令牌 x。不要试图使它成为一个枚举或任何需要在红线上方声明的东西。整数或字符串是更好的选择。它可能不是类型安全的。事实上,它不可能是类型安全的。但它将允许您保留架构的组件结构。

如果我们在高层模块中声明一个枚举,那么低层模块不仍然依赖于高层模块吗?如果是这样,那么在这种情况下使用枚举有什么问题?

enums design-patterns factory solid-principles

2
推荐指数
1
解决办法
277
查看次数

VBA for Office类模块(对象)工厂

我有一个相对复杂的Access 2007用VBA编写的应用程序(4个枚举,7个模块,38个类模块,86个表单,以及一大堆表和查询).我发现使用对象工厂设计是有益的,但到目前为止,我无法找到一种干净的方法来实现这种类型的功能,而无需在VB或C#中轻松实现的标准抽象/继承.

有没有人有过在VBA中实施工厂设计的经验,甚至可能吗?......还是有一个巧妙的"技巧"可以帮助我获得相同的总体目标?

我在工厂设计方面的经验仅限于C#,我从来没有在VB中完成它,所以也许VBA中有一些我不知道的VB常见的东西.

我将收到具体日期.根据该日期,我需要计算2到5个其他日期之间的任何地方.计算这些日期的规则根据输入日期的"类型"而变化.

因此,如果我的日期为07/15/2009,这是一个类型1日期,它将返回

07/15/2010日期1,07/15/2011日期2,07/15/2012日期3,06/10/2012,日期4和07/10/2012,日期5

如果我把相同的日期,但把它作为日期类型2我将得到null为日期1,null为日期2,null为日期3,06/10/2011为日期4和07/10/2011为日期5

因此,对于每组规则,最少有3个可能的最大值为6(现在这可以随时扩展)我将基本上输入一个开始日期...规则...并返回一个对象包含所有日期属性.

我希望这有点帮助.

inheritance ms-access vba abstract-class factory

1
推荐指数
2
解决办法
4661
查看次数

如何在C#中使用静态工厂方法创建基类?

我需要使用两个自定义文件读取器类之一; 一个读取固定宽度文件,一个读取CSV文件.这些读者中的每一个都具有某些属性等.我想使用工厂方法并拥有私有构造函数,因此我可以在创建对象之前运行一些业务逻辑.

编辑:更好的例子

//simple class with it's own factory method
class Class1
{
    private Class1()
    {
        //constructor code
    }
    public static Class1 CreateClass()
    {
        //do some business logic here
        return new Class1();
    }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是定义一个基类,然后覆盖工厂.我想问题是静态类属于基类CLASS,所以永远不能被覆盖,即使它们是继承的.这段代码有效

public class BaseClass
{
    //some common properties / fields here
    public string SomeField;

    //some common methods here

    //empty constructor
    protected BaseClass() { }

    //cannot have a virtual static class!  
    //Would really like to make this a virtual method
    public static BaseClass CreateClass() 
    {
        throw new …
Run Code Online (Sandbox Code Playgroud)

c# static factory

1
推荐指数
1
解决办法
2061
查看次数