- (NSInteger)getWebSiteCount;
@end
复制代码
#import "WebSiteFactory.h"
#import "ConcreteWebSite.h"
@implementation WebSiteFactory
- (instancetype)init {
self = [super init];
if (self) {
_flyweights = [NSDictionary dictionary];
}
return self;
}
- (id<WebSiteProtocol>)getWebSiteCategory:(NSString *)webKey {
__block id<WebSiteProtocol> webset = nil;
[self.flyweights enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if (webKey == key) {
webset = obj;
*stop = YES;
}
}];
if (webset == nil) {
ConcreteWebSite *concreteWebset = [[ConcreteWebSite alloc] init];
concreteWebset.webName = webKey;
webset = concreteWebset;
NSMutableDictionary *mutabledic = [NSMutableDictionary dictionaryWithDictionary:self.flyweights];
[mutabledic setObject:webset forKey:webKey];
self.flyweights = [NSDictionary dictionaryWithDictionary:mutabledic];
}
return webset;
}
- (NSInteger)getWebSiteCount {
return self.flyweights.count;
}
@end
代码中的getWebSiteCategory方法可以返回具体的享元对象,返回的这个享元对象同时遵守WebSiteProtocol的协议,WebSiteProtocol的代码如下:
复制代码
#import <Foundation/Foundation.h>
#import "User.h"
@protocol WebSiteProtocol <NSObject>
- (void)use:(User *)user;
@end
ConcreteWebSite的代码如下:
复制代码
#import <Foundation/Foundation.h>
#import "WebSiteProtocol.h"
@interface ConcreteWebSite : NSObject <WebSiteProtocol>
@property (nonatomic, copy) NSString *webName;
@end










