【发布时间】:2016-07-12 13:18:26
【问题描述】:
我在网上浏览了几个视频和博客。感觉好像我什么都懂,但是仍然在努力实现抽象工厂模式。这是我的要求:
- 我有一个用户类,它应该提供一个用户对象。
- 我的应用程序中有两种类型的用户,例如服务提供者 (Provider) 和服务接收者 (Consumer)。
- 这两种类型的用户之间有一些共同的属性,例如姓名、电子邮件 ID、手机号码等。对于 Provider 类型,会有一些额外的属性。
- 提供者类型可以是例如出租车司机或餐厅等
我想为这个用户类实现抽象工厂和工厂方法模式,以便应用程序可以与用户模型分离,并且每当应用程序需要提供者或消费者类型的用户时,它应该得到正确的对象。
到目前为止我尝试了什么:
AbstractUserProtocol.h
@protocol AbstractUserProtocol
@required
@property(nonatomic, strong) id delegate;
@property(nonatomic, readonly, getter=isExist) BOOL exist;
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSString *emailID;
@property (nonatomic, assign) NSInteger phoneNumber;
-(void)saveUserData;
-(void)retrievUserData;
@end
AbstractUser.h
@interface AbstractUser : NSObject <AbstractUserProtocol>
-(id)initWithType:(UserType)usrType;
@end
AbstractUser.m
@implementation AbstractUser
@synthesize delegate, exist, name, emailID, phoneNumber;
-(id)initWithType:(UserType)usrType
{
self = nil;
if (usrType == kConsumer) {
self = [Consumer alloc]init];
}
else if (usrType == kProvider) {
self = [ProviderFactory alloc] initWithServiceType:TaxiService];
}
return self;
}
-(void)saveUserData {
[NSException raise:NSInternalInconsistencyException
format:@"You have not implemented %@ in %@",
NSStringFromSelector(_cmd), NSStringFromClass([self class])];
}
-(void)retrievUserData {
}
@end
现在从 AbstractUser 类创建了两个子类 Consumer 和 ProviderFactory。
消费者.h
@interface Consumer : AbstractUser
@property (nonatomic, strong) NSString *address;
@end
ProviderFactory.h
@interface ProviderFactory : AbstractUser
-(id)initWithServiceType:(ServiceType)srvType;
@property(nonatomic, strong) NSString *ownerDetails;
@end
因此,如果将来我的应用程序想要支持其他业务用户,例如 Taxi 和 Restaurant 类型,那么我只需要创建一个类并通过 ProviderFactory 类进行初始化。
我的方法对于抽象工厂模式是否正确?感谢任何指导。
【问题讨论】:
标签: ios objective-c oop design-patterns