我们的一个静态库中有一个单例类。它是一个单例,因为我们希望能够始终“记住”它的状态。本质上它是一个用户管理单例。
它有一个属性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
覆盖函数的函数吗?还是我必须重写这些单例方法来处理“新”子类?
有什么方法可以修改这些方法以使第 3 方可以轻松扩展此类?
谢谢