iOS设计模式 - 享元

iOS设计模式 - 享元

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

细节

iOS设计模式 - 享元

 

上一篇:高度概括艺术-初识抽象类 | 带你学《Java面向对象编程》之五十二


下一篇:Winform自定义窗体样式,实现标题栏可灵活自定义