相关疑难解决方法(0)

如何使用代理模式来替换单例?

这是对单身人士如此糟糕的一些评论的回应

有人建议可以使用代理模式代替单例来缓存DB数据.但我看不出优势,事实上单身人士似乎更"可控".

让我详细说明这个问题.假设你有一个数据库,有大量的数据,从不改变,所以它可以被认为是只读的,为什么代理模式比单例更好地建模这个数据缓存呢?

(PS:如果你要说"因为它更''可测试'!" - 请详细说明,我仍然习惯这些概念)

谢谢你的帮助!

singleton design-patterns

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

我应该在函数中使用静态变量来防止重新计算值吗?

我已经写了一段时间的C ++代码,但是一段时间以来,我一直在想一些事情,而没有找到一个明确的答案。

我的意思是:假设我有一个函数(可以是方法,可以是static,但不一定),并且该函数使用一些“重”对象(例如无法确定的字符串)在编译时很容易,但这在整个执行过程中是恒定的)。我实际遇到的一个示例如下:

/* Returns an endpoint for an API
 * Based on the main API URL (getApiUrl())
 */
virtual QString getEndPointUrl() const override
{
    QString baseUrl = getApiUrl();
    QString endpointUrl = QString("%1/%2").arg(baseUrl, "endpoint");
    return endpointUrl;
}
Run Code Online (Sandbox Code Playgroud)

当然,这只是一个例子(我知道QStrings具有自己独特的Qt内存管理功能,但是让我们承认我们正在处理基本对象)。

执行以下操作是一个好主意吗?

virtual QString getEndPointUrl() const override
{
    /* We determine baseUrl only once */
    static const QString baseUrl = getApiUrl();
    /* We compute endpointUrl only once */
    static const QString endpointUrl = QString("%1/%2").arg(baseUrl, "endpoint");
    return endpointUrl; …
Run Code Online (Sandbox Code Playgroud)

c++ performance member-functions variable-declaration

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

强制子类中的单例模式

我想强制子类来实现单例模式.

我原本以为在父类中有一个抽象的静态属性,但是虽然接近但是没有意义(抽象要求和实例).

接下来,我想到了一个带有静态属性的接口,但这也没有意义(接口也需要一个实例).

这是可能的,或者我应该放弃这一思路并实施抽象工厂?

c# design-patterns

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

静态类优于使用Singleton的优点

重复

单身人士怎么了?
单身人士:好的设计还是拐杖?
Singleton:应该如何使用单身人士有
什么不好的


您可以找到在Static类上使用Singleton的众多原因.但肯定会有一些情况,在Singleton之前使用静态类会更好.这些是什么?

singleton static class

8
推荐指数
3
解决办法
6580
查看次数

C#Singleton"GetInstance"方法或"实例"属性?

从谁需要"得到一个API最终用户的角度来看一个实例"一个Singleton类的,你喜欢"获得" 一个在.Instance属性或"称之为" .GetInstance()方法?

public class Bar
{
    private Bar() { }

    // Do you prefer a Property?
    public static Bar Instance
    {
        get
        {
            return new Bar();
        }
    }

    // or, a Method?
    public static Bar GetInstance()
    {
        return new Bar();
    }
}
Run Code Online (Sandbox Code Playgroud)

c# singleton instance

8
推荐指数
2
解决办法
3万
查看次数

C++:对Singleton类中实例的未定义​​引用

我目前正在尝试将工厂实施为单身人士.我几乎使用了Singleton模式的教科书示例.这是.h文件:

namespace oxygen{

class ImpFactory{

public:
    static boost::shared_ptr<ImpFactory> GetInstance();

private:
    static boost::shared_ptr<ImpFactory> mInstance;
};
Run Code Online (Sandbox Code Playgroud)

这是.cpp文件:

#include "impfactory.h"

using namespace oxygen;
using namespace boost;

shared_ptr<ImpFactory> ImpFactory::GetInstance(){
    if (mInstance.get() == 0)
        mInstance = shared_ptr<ImpFactory>(new ImpFactory());
    return mInstance;
}
Run Code Online (Sandbox Code Playgroud)

代码编译,但我收到链接器错误:

../../lib/oxygen/liboxygen.so.3.2.4:未定义引用`oxygen :: ImpFactory :: mInstance'

这目前有三名学生难倒.有任何想法吗?

c++ linker singleton static undefined-reference

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

C++ Singleton类 - 继承良好实践

在现有项目中,我将继承一个声明为Singleton的Controller类(MVC),以便定义我自己的处理.如何恰当地推导出这个Singleton类?

首先,我扩展了上下文并需要这种继承.

我添加到现有软件的应用程序想要使用MVC模块,该模块执行与我愿意执行的任务几乎相同的任务.它使用相同的方法签名和稍作修改.重写我自己的MVC模块肯定会重复代码.现有模块本质上面向其应用于软件的另一部分,我不能简单地使用相同的模块.但是它被编写为模型 - 视图 - 控制器模式,其中Controller是Singleton.我已经得到了View.

其次,我怀疑我可以经典推导出Singleton类.

从继承类调用构造函数只会为父类调用getinstance(),并且无法从派生类(?)返回对象.

第三,我是如何看待某种方式来处理的.请评论/帮助我改进!

我在一个可以调用AbstractController的类中复制了整个Singleton类.我两次推出这个课程.第一个孩子是单身,采用父母阶级的整体治疗.第二个孩子是我应用程序的控制器,具有自己重新定义的处理.

谢谢!

c++ oop inheritance singleton design-patterns

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

SpriteKit:在场景之间传递数据

我试图在SpriteKit中的场景"SKScene"之间传递数据.例如,我想将分数从A级传递到B级.

也许解决方案是归档,但我想实现更简单的东西,就像我们使用视图控制器一样.

在这方面的任何线索将非常感谢.

iphone ios ios7 sprite-kit

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

阻止创建一个类的多个对象

如何将任何类的对象限制为一个.我的班级看起来像:

class Speaker
  include Mongoid::Document
  field :name, :type => String
end
Run Code Online (Sandbox Code Playgroud)

我只是想让一个扬声器的实例.一种方法是添加验证,该验证将检查已经存在的Speaker类的对象的数量.有没有红宝石的做事方式?

ruby ruby-on-rails mongoid ruby-on-rails-3

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

Python中类的单个实例

我正在创建一个Python应用程序,其中包括与服务器的套接字通信。我想要一个可以在我的整个应用程序中使用的模块(其他几个模块)。目前,我的模块如下所示:

class SocketCommunication:

    def __init__(self):
        self.socketIO = SocketIO(settings.ADDRESS, settings.PORT, Namespace)

    def emit(self, message, data):
        json_data = json.dumps(data.__dict__)
        self.socketIO.emit(message, json_data)


class Namespace(BaseNamespace):
    def on_connect(self):
        print '[Connected]'

    def on_disconnect(self):
        print "[Disconnected]"
Run Code Online (Sandbox Code Playgroud)

当我在其他模块中使用它时,请执行以下操作:

import SocketCommunication
self.sc = SocketCommunication()
Run Code Online (Sandbox Code Playgroud)

问题在于,每次执行此操作时,都会创建一个新连接,该连接将在服务器上显示为新客户端,这是不希望的。据我了解,在Python中应该避免使用Singleton,因此我对这种问题的最佳实践感到好奇吗?

python sockets singleton class instance

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