我是Android新手,我正在做一个简单的应用程序来获得一些基本的经验。 我的应用程序非常简单,包括广播接收器和其他一些活动。 这两个组件都使用单个数据库,所以理论上可能会同时尝试访问数据库。 目前我只是简单地实例化db对象(这是一个SQLite数据库帮助类),每次我需要它,并执行所需的操作:查询,插入等 从我在这里和其他一些文档中读到的,这有一个问题,即在数据库被并发访问的情况下,获得一个“数据库locking”exception,所以更好的方法是有一个这个数据库对象的实例,所以所有组件始终使用相同的db连接。 上述推理是否正确? 单身人士是否会成为一个足够好的解决scheme呢? 我知道一些纯粹主义者可能会反对,但请注意,这是一个相当简单的应用程序,所以我可以负担得起的事情,我不会在其他情况下。 否则,更好的select是什么? 我已经阅读过关于使用内容提供者的内容,但是这对我来说太多了,除此之外,我不想与其他活动分享数据。 我确实看过这篇文章 ,发现它相当有帮助。
可能重复: 谁需要单身? 我总是写最好的做法 ,但我也想明白为什么一个给定的事情是一个最佳实践 。 我读过一篇文章(不幸的是,我不记得),单例类最好被实例化,而不是用静态函数做的,并用范围parsing运算符(::)访问。 所以如果我有一个包含我所有工具来validation的类,简而言之: class validate { private function __construct(){} public static function email($input){ return true; } } 我被告知这被认为是不好的做法 (至less是警告),因为垃圾收集器和维护等事情。 那么对“单一类作为静态方法”的批评所要做的是,我实例化一个类,我100%确定我只会实例化一次。 对我来说,这似乎是做了“双重工作”,因为它已经准备好了。 我错过了什么? 关于这个问题的看法是什么? 当然,这不是一个生死攸关的问题,但是如果select的话,也可以做正确的事情:)
从Head Firstdevise模式书中,双重检查locking的单例模式已经实现如下: public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 我不明白为什么volatile被使用。 不volatile用法是否会volatile使用双重检查的locking(即性能)的目的?
可能重复: 单身人士有什么不好? 可以理解的是,许多devise模式在某些情况下可能会被滥用,像妈妈一样总是这样说:“ 太多的好东西并不总是好的! ” 我注意到,这些日子里,我很多都在使用单身人士,我担心自己会滥用devise模式,并且越来越深入到一种坏习惯的习惯中去。 我们正在开发一个Flex应用程序,在用户使用这个应用程序的时候,这个应用程序有一个相当大的分层数据结构。 用户可以根据需要加载,保存,更改和刷新数据。 这个数据通过一个Singleton类来集中,它聚合了一些ArrayCollections,Arrays,value对象和一些其他通过getter和setter公开的本地成员variables。 为了从应用程序中的任何位置获取对我们数据的引用,我们确实熟悉了所有的Model.getInstance()方法types的东西。 这确保了我们始终掌握相同的数据副本,因为当我们devise时,我们说在应用程序生命周期中只允许存在一次实例。 从这个中央数据存储库,我们可以很容易地例如调度属性更改的事件,并可以有多个引用中央数据的UI组件,更新其显示以反映已发生的数据更改。 到目前为止,这种方法是有效的,并certificate对我们的情况非常实际。 然而,我发现在创build新课程时我有点过激。 类似Singleton这样的问题,还是应该用其他方式来pipe理,比如可能使用工厂,有时会变得有些困难,有些不确定。 我在哪里画单行? 是否有一个很好的指导方针来决定何时使用单身人士,以及何时离开他们。 另外,任何人都可以推荐一本关于devise模式的好书吗?
如果你可以瞄准iOS 4.0或以上 使用GCD,在目标C(线程安全)中创build单例的最好方法是什么? + (instancetype)sharedInstance { static dispatch_once_t once; static id sharedInstance; dispatch_once(&once, ^{ sharedInstance = [[self alloc] init]; }); return sharedInstance; }
荣耀的全球variables – 成为一个辉煌的全球课堂。 有人说打破面向对象的devise。 给我的场景,除了好的旧的logging器,它是有意义的使用单身。
似乎有很多方法可以在Python中定义单例 。 关于Stack Overflow是否有共识?
我试图找出一个合适的单例模型在Swift中的使用。 到目前为止,我已经能够得到一个非线程安全的模型,其工作原理如下: class var sharedInstance:TPScopeManager { get { struct Static { static var instance : TPScopeManager? = nil } if !Static.instance { Static.instance = TPScopeManager() } return Static.instance! } } 在Static结构中包装单例实例应该允许单个实例不会与单例实例发生冲突,而没有复杂的命名规则,它应该使事情相当私密。 显然,这个模型并不是线程安全的,所以我试图添加dispatch_once到整个事情: class var sharedInstance:TPScopeManager { get { struct Static { static var instance : TPScopeManager? = nil static var token : dispatch_once_t = 0 […]
什么是在Java中实现单例模式的有效方法?
单身模式是GoF 模式书的完全付费成员,但最近似乎被开发者世界所遗弃。 我仍然使用了很多单例,特别是对于工厂类来说 ,虽然你必须小心multithreading问题(实际上就像任何一个类),但是我不明白为什么它们太可怕了。 特别是堆栈溢出,似乎认为每个人都认为单身人士是邪恶的。 为什么? 请以“ 事实,参考或具体的专业知识 ”来支持您的答案