这是对单身人士如此糟糕的一些评论的回应
有人建议可以使用代理模式代替单例来缓存DB数据.但我看不出优势,事实上单身人士似乎更"可控".
让我详细说明这个问题.假设你有一个数据库,有大量的数据,从不改变,所以它可以被认为是只读的,为什么代理模式比单例更好地建模这个数据缓存呢?
(PS:如果你要说"因为它更''可测试'!" - 请详细说明,我仍然习惯这些概念)
谢谢你的帮助!
我已经写了一段时间的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) 我想强制子类来实现单例模式.
我原本以为在父类中有一个抽象的静态属性,但是虽然接近但是没有意义(抽象要求和实例).
接下来,我想到了一个带有静态属性的接口,但这也没有意义(接口也需要一个实例).
这是可能的,或者我应该放弃这一思路并实施抽象工厂?
您可以找到在Static类上使用Singleton的众多原因.但肯定会有一些情况,在Singleton之前使用静态类会更好.这些是什么?
从谁需要"得到一个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) 我目前正在尝试将工厂实施为单身人士.我几乎使用了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'
这目前有三名学生难倒.有任何想法吗?
在现有项目中,我将继承一个声明为Singleton的Controller类(MVC),以便定义我自己的处理.如何恰当地推导出这个Singleton类?
首先,我扩展了上下文并需要这种继承.
我添加到现有软件的应用程序想要使用MVC模块,该模块执行与我愿意执行的任务几乎相同的任务.它使用相同的方法签名和稍作修改.重写我自己的MVC模块肯定会重复代码.现有模块本质上面向其应用于软件的另一部分,我不能简单地使用相同的模块.但是它被编写为模型 - 视图 - 控制器模式,其中Controller是Singleton.我已经得到了View.
其次,我怀疑我可以经典推导出Singleton类.
从继承类调用构造函数只会为父类调用getinstance(),并且无法从派生类(?)返回对象.
第三,我是如何看待某种方式来处理的.请评论/帮助我改进!
我在一个可以调用AbstractController的类中复制了整个Singleton类.我两次推出这个课程.第一个孩子是单身,采用父母阶级的整体治疗.第二个孩子是我应用程序的控制器,具有自己重新定义的处理.
谢谢!
我试图在SpriteKit中的场景"SKScene"之间传递数据.例如,我想将分数从A级传递到B级.
也许解决方案是归档,但我想实现更简单的东西,就像我们使用视图控制器一样.
在这方面的任何线索将非常感谢.
如何将任何类的对象限制为一个.我的班级看起来像:
class Speaker
include Mongoid::Document
field :name, :type => String
end
Run Code Online (Sandbox Code Playgroud)
我只是想让一个扬声器的实例.一种方法是添加验证,该验证将检查已经存在的Speaker类的对象的数量.有没有红宝石的做事方式?
我正在创建一个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,因此我对这种问题的最佳实践感到好奇吗?