ios – 如何使我的单例类可扩展?

ios – 如何使我的单例类可扩展?,第1张

概述我们在一个静态库中有一个单例类.这是一个单身人士,因为我们希望能够随时“记住”其状态.从本质上讲,它是一个用户管理单例. 它有一个User * user属性,它有 – (void)authenticateUser等方法. 我们希望将此提供给想要创建自己的 – (void)authenticateUser方法的客户端.为此,我设想他们将扩展UserManager类并只是覆盖该方法. 但是因为它是单例 我们在一个静态库中有一个单例类.这是一个单身人士,因为我们希望能够随时“记住”其状态.从本质上讲,它是一个用户管理单例.

它有一个User * user属性,它有 – (voID)authenticateUser等方法.

我们希望将此提供给想要创建自己的 – (voID)authenticateUser方法的客户端.为此,我设想他们将扩展UserManager类并只是覆盖该方法.

但是因为它是单例,所以它具有以下方法: – (ID)sharedInstance和自定义alloc方法.他们都看起来像这样:

static UserManager *_sharedInstance = nil;+ (ID)sharedInstance {    @synchronized([UserManager class]) {        if(!_sharedInstance){            ID temp = [[self alloc] init];            [temp class];        }        return _sharedInstance;    }    return nil;}+ (ID)alloc {    @synchronized([UserManager class]) {        NSAssert(_sharedInstance == nil,@"Attempted to allocate a second instance of a singleton");        _sharedInstance = [super alloc];        return _sharedInstance;    }    return nil;}

所以,鉴于此,是否可以继承和扩展此UserManager类?我可以创建一个覆盖函数的ChildUserManager吗?或者我是否必须重写这些单例方法来处理“新”子类?

有什么方法可以修改这些方法,以便第三方可以轻松扩展这个类?

谢谢

解决方法 Beter设计将使用Composition然后继承.声明协议AuthenticationDelegate

@protocol AuthenticationDelegate@optional-(voID) authenticateUser:(User*)inUser;@end

在UserManager中有一个属性,默认情况下指向UserManager.

@class UserManager : NSObject <AuthenticationDelegate> {    ......} @property (assign) ID<AuthenticationDelegate>  authenticator+ (ID)sharedInstance;

如果您的客户希望通过他们的方法进行身份验证,那么他们必须向AuthenticationDelegate协议确认并实现其方法.他们必须将authenticator属性设置为其所限定的类.然而它的单身人士.因此,只要对象被实例化,他们就可以设置它.因此他们可以使用他们的身份验证器

但要确保验证者剂量指向零.您可以实现setAuthenticator:方法,以便当客户端将此设置为nil时,authenticator将指向UserManager.

static UserManager *_sharedInstance = nil;@implementation UserManager@synthasize authenticator;+ (ID)sharedInstance {    @synchronized([UserManager class]) {        if(!_sharedInstance){            ID temp = [[self alloc] init];            [temp class];        }        return _sharedInstance;    }    return nil;}+ (ID)alloc {    @synchronized([UserManager class]) {        NSAssert(_sharedInstance == nil,@"Attempted to allocate a second instance of a     singleton");        _sharedInstance = [super alloc];        return _sharedInstance;    }    return nil;}-(voID)init {    self = [super init];    if (self) {        self.authenticator = nil;    }}-(voID)setAuthenticator:(ID<AuthenticationDelegate>)inAuthenticator {    if (!inAuthenticator) {        __authenticator = self;    } else {        __authenticator = inAuthenticator;    }}#pragma mark - AuthenticationDelegate-(voID) authenticateUser:(User*)inUser{    // Your Authentication Code.}

希望这可以帮助…

总结

以上是内存溢出为你收集整理的ios – 如何使我的单例类可扩展?全部内容,希望文章能够帮你解决ios – 如何使我的单例类可扩展?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1020779.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存