我需要检查是否存在实例class_A,如果确实存在,则获取该实例.
如何用PHP做到这一点?
一如既往,我认为一个简单的例子是最好的.
现在我的问题变成:
$ins = new class_A();
Run Code Online (Sandbox Code Playgroud)
如何在实例class_A化时将实例存储在静态成员变量中?
如果在调用时可以存储实例会更好__construct().比如,它应该不受限制地实现它的实现方式.
这与以下内容有关:单身人士有什么不好
你能给我一些例子,说明可以使用其他技术避免单身人士吗?我需要在C++中使用它,因此您可以使用C++特定技术提供示例.
更清楚:如何在没有单例的情况下实现文件管理器,资源管理器,日志管理器等.
我有一个主应用程序类,其中包含一个记录器,以及一些常规应用程序配置等.
现在我将显示许多GUI窗口等(将使用记录器和配置),我不想将记录器和配置传递给每个构造函数.
我已经看到了一些变体,比如在任何地方声明主类extern,但这并不是非常面向对象的.什么是使主类中的元素可供所有(或大多数)其他类访问的"标准"C++方法?
一个共同的(1,2)实现单的方式是使用具有静态构件的内部类:
public class Singleton {
private static class SingletonHolder {
public static final Singleton instance = new Singleton();
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
private Singleton() {
//...
}
}
Run Code Online (Sandbox Code Playgroud)
据说这个实现是懒惰的初始化和线程安全的.但究竟是什么保证了它的线程安全?处理 线程和锁定的JLS 17没有提到静态字段具有任何类型的先发生关系.我怎样才能确定初始化只发生一次并且所有线程都看到同一个实例?
我有一个类实例需要由其他一些类访问.
error: calling a private constructor of class 'Foo'
要在QGraphicsView框架的上下文中进一步指定问题:我想添加QGraphicsItems,它由控制器类(管理项目)实例化到QGraphicsScene,这是(但我不坚持这个细节)我的成员QMainWindow类.
我花了相当多的时间在互联网上搜索,但我相当新,我有点被困在这里.对于解决困境的最佳方法,我表示赞赏.
保证在C++标准首次使用时实例化静态本地.但是,我想知道如果我在构建时访问静态本地对象会发生什么.我认为这是UB.但在以下情况下避免这种情况的最佳做法是什么?
Meyers Singleton模式在静态getInstance()方法中使用静态局部来在第一次使用时构造对象.现在,如果构造函数(直接或indireclty)getInstance()再次调用,我们将面临静态初始化尚未完成的情况.这是一个最小的例子,它说明了问题情况:
class StaticLocal {
private:
StaticLocal() {
// Indirectly calls getInstance()
parseConfig();
}
StaticLocal(const StaticLocal&) = delete;
StaticLocal &operator=(const StaticLocal &) = delete;
void parseConfig() {
int d = StaticLocal::getInstance()->getData();
}
int getData() {
return 1;
}
public:
static StaticLocal *getInstance() {
static StaticLocal inst_;
return &inst_;
}
void doIt() {};
};
int main()
{
StaticLocal::getInstance()->doIt();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
在VS2010中,这没有问题,但VS2015死锁.
对于这种简单,减少的情况,显而易见的解决方案是直接呼叫getData(),而无需getInstance()再次呼叫.但是,在更复杂的情况下(根据我的实际情况),这种解决方案是不可行的.
如果我们改变getInstance()方法来处理像这样的静态局部指针(从而放弃Meyers Singleton模式):
static StaticLocal …Run Code Online (Sandbox Code Playgroud) 可能重复:
在设计模式上:何时使用Singleton?
这个问题不是关于单身人士是否"被视为有害".我只是想知道,从你的经验,都有些什么具体情况,其中单身似乎运作良好.
编辑: 请,如果你想讨论单身的恰当性和/或邪恶一般,有已位于exising问题:137975,11831
哎呀!我刚刚发现我的问题已在这里被问到:关于设计模式:何时使用Singleton?
我需要从非bean对象获取spring应用程序上下文.在SO中的另一个线程中,接受的答案建议使用单例来获取应用程序上下文. 获取Spring应用程序上下文
但是使用单例使得我的代码更加耦合并且不太可测试,许多线程中讨论的常见问题(例如单身人士的坏事)
问题是,有一种优雅的方法从非bean对象获取应用程序上下文而不使用单例吗?
我有一个运行的Windows服务.在这个服务中,我托管了一些服务(WCF).我需要一些"内存数据持有者"类.只要Windows服务正在运行,此类的目的是保存不持久的数据.必须可以通过WCF服务访问此类.他们在这个类中放了一些值或从这个类中检索一些值.
我想到的第一件事就是单身人士课程.我认为这种模式非常适合这种情况.但后来我读到一些帖子说单身人士班级实际上并不好.
那么这种情况还有其他选择吗?或者这是单身吗?Factory方法怎么样?但那我在哪里可以找到对象的参考?
这是对单身人士如此糟糕的一些评论的回应
有人建议可以使用代理模式代替单例来缓存DB数据.但我看不出优势,事实上单身人士似乎更"可控".
让我详细说明这个问题.假设你有一个数据库,有大量的数据,从不改变,所以它可以被认为是只读的,为什么代理模式比单例更好地建模这个数据缓存呢?
(PS:如果你要说"因为它更''可测试'!" - 请详细说明,我仍然习惯这些概念)
谢谢你的帮助!