https://github.com/YouXianMing

iOS设计模式 - 享元

iOS设计模式 - 享元

 

原理图

 

说明

享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件。通常物件中的部分状态是可以分享。常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元。

 

源码

https://github.com/YouXianMing/iOS-Design-Patterns

//
//  Menu.h
//  FlyweightPattern
//
//  Created by YouXianMing on 15/10/31.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "CoffeeFlavor.h"

@interface Menu : NSObject

/**
 *  获取指定味道的咖啡(如果没有则创建)
 *
 *  @param flavor 味道
 *
 *  @return 指定味道的咖啡
 */
- (CoffeeFlavor *)lookupWithFlavor:(NSString *)flavor;

@end
//
//  Menu.m
//  FlyweightPattern
//
//  Created by YouXianMing on 15/10/31.
//  Copyright © 2015年 ZiPeiYi. All rights reserved.
//

#import "Menu.h"

@interface Menu ()

@property (nonatomic, strong) NSMutableDictionary <NSString *, CoffeeFlavor *>  *flavors;

@end

@implementation Menu

- (instancetype)init {
    
    self = [super init];
    
    if (self) {
    
        self.flavors = [NSMutableDictionary dictionary];
    }
    
    return self;
}

- (CoffeeFlavor *)lookupWithFlavor:(NSString *)flavor {

    NSParameterAssert(flavor);

    if ([self.flavors objectForKey:flavor] == nil) {
        
        CoffeeFlavor *coffeeFlavor = [[CoffeeFlavor alloc] init];
        coffeeFlavor.flavor        = flavor;
        
        self.flavors[flavor] = coffeeFlavor;
    }
    
    return [self.flavors objectForKey:flavor];
}

@end

 

细节

 

posted @ 2015-10-31 23:30  YouXianMing  阅读(844)  评论(0编辑  收藏  举报