我真的不知道如何正确地命名这个问题。我有一个特定的场景,我有一个对象,无论何时使用都应该处理掉。原因有两个:
对象中可以涵盖这两个原因,让每个公共方法锁定相同的 mutex 并初始化私有方法上的每个变量,这也在每个公共方法上调用。
此解决方案容易出错,并且在多线程方案中序列化访问会产生副作用,因为我将在使用前锁定对象。当然,调用站点可以在调用方法之前创建一个新实例(删除副作用),但它也容易出错。
所以我提出了一个解决方案,我发现它既干净又非常奇怪:
我的对象公开静态方法,它们具有创建对象的新实例和执行方法所需的变量作为参数。此静态方法创建对象的实例,然后调用必要的方法。
当然,构造函数是私有的。
当我看到这个解决方案时,我注意到的第一件事是我的对象看起来很像一个程序方法,当然,因为每个新方法调用都需要一个新对象。但是这个对象的责任很适合这个方案。
我的问题(最后!,我知道)是:
感谢您提出任何意见。
答案 0 :(得分:1)
您没有说出您正在使用的语言(最好使用标签)。在C#中,我会执行以下操作:
静态方法固有地将您的具体类耦合到任何客户端类。除此之外,这使得客户端类难以单独测试。
答案 1 :(得分:1)
与您的解释一样,它只是旧程序函数的类语法包装。这实际上不是一类对象。我认为没有像这样的非OOP编程的OOP模式(除了Singleton?)。
这样的设计有什么意义,增加了在函数内部创建和销毁一次性使用对象的内存/性能开销?
顺便说一句,你可以将课程分成两个班级。一个用于资源保持另一个用于资源操作。让客户决定最合适的资源管理方案,并将资源保持对象传递给操作类的方法。
答案 2 :(得分:0)
没有内置的方法来确保不重复使用对象,但我可以想到一些方法可以尝试鼓励它。如果用户想要的话,所有这些都可以得到。