我在rails中有一个站点,并希望在站点范围内进行设置.如果发生特定事件,我的应用程序的一部分可以通过SMS通知管理员.这是我希望通过站点范围设置进行配置的功能示例.
所以我在想我应该有一个环境模型或类似的东西.它需要是一个模型,因为我希望能够使用has_many:SMS通知的联系人.
问题是数据库中只能有一个用于设置模型的帖子.所以我在考虑使用Singleton模型,但这只会阻止创建新对象吗?
我还需要为每个属性创建getter和setter方法,如下所示:
def self.attribute=(param)
Model.first.attribute = param
end
def self.attribute
Model.first.attribute
end
Run Code Online (Sandbox Code Playgroud)
直接使用Model.attribute可能不是最佳实践,但总是创建它的实例并使用它吗?
我该怎么办?
我有一个特定的问题,如何在Android中运行类加载/垃圾收集.我们现在偶然发现了几次这个问题,据我所知,Android在这里与普通的JVM不同.
问题在于:我们目前正在尝试减少应用程序中的单例类,以支持单个根工厂单例,其唯一目的是管理其他管理器类.如果你愿意的话,是一名顶级经理.这使我们可以轻松地替换测试中的实现,而无需选择完整的DI解决方案,因为所有活动和服务共享对该根工厂的相同引用.
这是它的样子:
public class RootFactory {
private static volatile RootFactory instance;
@SuppressWarnings("unused")
private Context context; // I'd like to keep this for now
private volatile LanguageSupport languageSupport;
private volatile Preferences preferences;
private volatile LoginManager loginManager;
private volatile TaskManager taskManager;
private volatile PositionProvider positionManager;
private volatile SimpleDataStorage simpleDataStorage;
public static RootFactory initialize(Context context) {
instance = new RootFactory(context);
return instance;
}
private RootFactory(Context context) {
this.context = context;
}
public static RootFactory getInstance() {
return instance;
}
public LanguageSupport getLanguageSupport() …Run Code Online (Sandbox Code Playgroud) 我正在阅读有关单例模式的维基,我不确定我是否理解这一点:https://en.wikipedia.org/wiki/Initialization-on-demand_holder_idiom正确部分.
所以要简单一点:为什么Bill Pugh的解决方案比上面的例子更好?
是因为VM在实际使用之前没有加载静态类或类似的东西,所以在转向getInstance()方法之前我们不创建对象?那个方法线程安全只是在初始化对象的程度吗?
我在网上找到了一些信息来创建一个使用GCD的单例类.这很酷,因为它的线程安全,开销很低.遗憾的是,我找不到完整的解决方案,只能找到sharedInstance方法的片段.所以我使用试错法制作了自己的课 - 而且瞧瞧 - 以下内容出来了:
@implementation MySingleton
// MARK: -
// MARK: Singleton Pattern using GCD
+ (id)allocWithZone:(NSZone *)zone { return [[self sharedInstance] retain]; }
- (id)copyWithZone:(NSZone *)zone { return self; }
- (id)autorelease { return self; }
- (oneway void)release { /* Singletons can't be released */ }
- (void)dealloc { [super dealloc]; /* should never be called */ }
- (id)retain { return self; }
- (NSUInteger)retainCount { return NSUIntegerMax; /* That's soooo non-zero */ }
+ (MySingleton …Run Code Online (Sandbox Code Playgroud) 所以,假设我有一个单例类实例,我在DI中注册如下:
services.AddSingleton<IFoo, Foo>();
Run Code Online (Sandbox Code Playgroud)
并且假设Foo该类具有许多其他依赖项(主要是允许其加载数据的存储库类).
根据我目前的理解,Foo实例在首次使用(询问)之前不会创建.有没有办法初始化除构造函数之外的这个类?就像ConfigureServices()完成后一样?或者初始化代码(从db加载数据)是否应该在Foo的构造函数中完成?
(如果这个类在第一次使用之前加载其数据以加速第一次访问,那将是很好的)
在我迄今为止的所有项目中,我使用单例模式在整个应用程序中访问应用程序配置.最近我看到很多文章都在讨论不使用单例模式,因为这种模式不会提升可测试性,也会隐藏Component依赖性.我的问题是存储应用程序配置的最佳方法是什么,可以在整个应用程序中轻松访问,而无需在整个应用程序中传递配置对象?
提前致谢
马杜
我已经尝试过几次了解Singleton是什么.也许我只是太过视觉化......所以任何人都可以用一个简单的比喻来分解它.
类似帖子:
如果单例实现如下,
class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
这个实现与延迟初始化方法有何不同?在这种情况下,将在加载类时创建实例,并且仅在第一次活动使用时加载类本身(例如,当您声明Singleton singleton = null时,不会加载Singleton.getInstance();)
即使使用延迟初始化方法,也会在调用getInstance()时创建实例
我错过了什么吗?
getInstance()Java中的目的是什么?
在我的研究过程中,我一直在阅读,这getInstance()有助于实现Singleton设计模式(这意味着整个程序中只有一个实例符合我的理解).但我不能只使用静态?这不是静止的全部意义吗?
如果我只是有静态方法和字段,它与使用getInstance()有何不同?是否存在静态的"范围"?例如,每个方法或类一个实例?
如果它们不同,在什么情况下我会选择getInstance()使用静态?
如果问题不清楚,我很抱歉,我确信我遗漏了一些有关主题的内容,我只是无法弄清楚是什么.
感谢您提供任何建议.
我想创建一个类,其中将保留所有实用程序方法,并且这些方法将在整个应用程序中使用.
问题:1
创建单例类并保留所有必要的方法或者我应该创建一个所有函数都是静态的类是不错的.
问题:2
swift上面两种方法的主要区别是什么?
问题:3
它将如何影响iOS的性能?
singleton ×10
java ×4
ios ×2
android ×1
asp.net-core ×1
classloader ×1
objective-c ×1
static ×1
swift ×1