- 结构型模式关注类和对象之间的组合
- 主要用于减少创建对象的数量,以减少内存占用和提高性能
- 内部状态:
- 在享元对象内部并且不会随着环境改变而改变的共享部分。
- 外部状态:
- 意图:
- 应用场景:
- 优点:
- 缺点:
- 提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不能随着内部状态改变而改变,否则会造成系统的混乱。
- 注意:
- 1.注意划分外部状态和内部状态,否则可能会引起线程安全问题。
- 2.这些类必须有一个工厂对象加以控制。
- 最常见的就是单元格的重用。
- 定义一个用户类
#import <Foundation/Foundation.h>
@interface HCDUser : NSObject
@property(nonatomic,strong)NSString *name;
@end
#import "HCDUser.h"
@implementation HCDUser
@end
#import <Foundation/Foundation.h>
#import "HCDUser.h"
@protocol HCDWebSite <NSObject>
-(void)use:(HCDUser *)user;
@end
#import <Foundation/Foundation.h>
#import "HCDWebSite.h"
@interface HCDConcreteWebSite : NSObject<HCDWebSite>
@property(nonatomic,strong)NSString *webName;
@end
#import "HCDConcreteWebSite.h"
@implementation HCDConcreteWebSite
-(void)use:(HCDUser *)user{
NSLog(@"网站分类:%@,用户:%@",self.webName,user.name);
}
@end
#import <Foundation/Foundation.h>
#import "HCDWebSite.h"
@interface HCDWebSiteFactory : NSObject
@property(nonatomic,strong)NSDictionary *flyweights;
-(id<HCDWebSite> )getWebSiteCategory:(NSString *)webkey;
-(NSInteger)getWebSiteCount;
@end
#import "HCDWebSiteFactory.h"
#import "HCDConcreteWebSite.h"
@implementation HCDWebSiteFactory
-(instancetype)init{
self = [super init];
if (self) {
_flyweights = [NSDictionary dictionary];
}
return self;
}
-(id<HCDWebSite> )getWebSiteCategory:(NSString *)webkey{
__block id<HCDWebSite> webset = nil;
[self.flyweights enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
if (webkey == key) {
webset = obj;
*stop = YES;
}
}];
if (webset == nil) {
HCDConcreteWebSite *concreteset = [[HCDConcreteWebSite alloc] init];
concreteset.webName = webkey;
webset = concreteset;
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
typedef id<HCDWebSite> HCDWebSiteType
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad]
HCDWebSiteFactory *facoty = [[HCDWebSiteFactory alloc]init]
HCDWebSiteType fx = [facoty getWebSiteCategory:@"产品展示"]
HCDUser *user = [[HCDUser alloc]init]
user.name = @"小菜"
[fx use:user]
HCDWebSiteType fy = [facoty getWebSiteCategory:@"产品展示"]
HCDUser *user1 = [[HCDUser alloc]init]
user1.name = @"大鸟"
[fy use:user1]
HCDWebSiteType fz = [facoty getWebSiteCategory:@"博客"]
HCDUser *user2 = [[HCDUser alloc]init]
user2.name = @"咪咪"
[fz use:user2]
NSInteger count = [facoty getWebSiteCount]
NSLog(@"个数:%d",count)
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]
// Dispose of any resources that can be recreated.
}
@end

- 结果虽然是三个人但是真正创建的对象网站只有2个供3个人使用。
