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

细节

 

时间: 2024-09-20 18:49:48

iOS设计模式 - 享元的相关文章

PHP设计模式——享元模式

声明:本系列博客参考资料<大话设计模式>,作者程杰.         享元模式使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件:它适合用于只是因重复而导致使用无法令人接受的大量内存的大量物件.通常物件中的部分状态是可以分享.常见做法是把它们放在外部数据结构,当需要使用时再将它们传递给享元.               UML类图:                    角色分析:           享元工厂角色(FWFactory):创建并管理BlogModel对象.

.NET设计模式-享元模式(Flyweight Pattern)

享元模式(Flyweight Pattern) --.NET设计模式系列之十三 Terrylee,2006年3月 摘要:面向对象的思想很好地解决了抽象性的问题,一般也不会出现性能上的问题.但是在某些情况下,对象的数量可能会太多,从而导致了运行时的代价.那么我们如何去避免大量细粒度的对象,同时又不影响客户程序使用面向对象的方式进行操作? 本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考.探索.权衡,通过比较而得出好的实现方式,而不

C++设计模式---享元模式----浪费可耻,节俭光荣

概述 一个软件系统在运行时产生的对象数量太多,将导致运行代价过高,带来系统性能下降等问题. 想想我们编辑文档用的word,文档里文字很多都是重复的,我们不可能为每一个出现的汉字都创建独立的空间,这样代价太大,那么我们如何去避免系统中出现大量相同或相似的对象,同时又不影响客户端程序通过面向对象的方式对这些对象进行操作? 享元模式正为解决这一类问题而诞生.享元模式通过共享技术实现相同或相似对象的重用,在逻辑上每一个出现的字符都有一个对象与之对应,然而在物理上它们却共享同一个享元对象,这个对象可以出现

跟屌丝大哥学习设计模式--享元模式

四.举例 这里就以去餐馆吃饭为例详细的说明下享元模式的使用方式.去菜馆点菜吃饭的过程大家一定都是轻车熟路了,这里就不赘述.在例子中我使用了一个list来存放外蕴状态和内蕴状态的对应关系,而且提供了查询每个客人点菜情况的方法.内蕴状态在这里代表了菜肴的种类,而外蕴状态就是每盘菜肴的点菜人.  A 让我们先来看看单纯享元模式的实现吧.     先看下抽象享元角色的定义:GoF对享元模式的描述是:运用共享技术有效地支持大量细粒度的对象. Flyweight模式是构造型模式之一,它通过与其他类似对象共享

10、Python与设计模式--享元模式

一.网上咖啡选购平台 假设有一个网上咖啡选购平台,客户可以在该平台上下订单订购咖啡,平台会根据用户位置进行线下配送.假设其咖啡对象构造如下: class Coffee: name = '' price =0 def __init__(self,name): self.name = name self.price = len(name)#在实际业务中,咖啡价格应该是由配置表进行配置,或者调用接口获取等方式得到,此处为说明享元模式,将咖啡价格定为名称长度,只是一种简化 def show(self):

设计模式之禅之设计模式-享元模式

一:享元模式定义        --->享元模式(Flyweight Pattern)是池技术的重要实现方式        --->使用共享对象可有效地支持大量的细粒度的对象        --->要求细粒度对象,那么不可避免地使得对象数量多且性质相近,那我们就将些对象的信息分为两个部分:内部状态(intrinsic)与外部状态(extrinsic).                ● 内部状态                        内部状态是对象可共享出来的信息,存储在享元对象

详解iOS App设计模式开发中对于享元模式的运用_IOS

享元模式的概念 在面向对象软件设计中,利用公共对象不仅能节省资源还能提高性能.共享的对象只能提供某些内在的信息,而不能用来识别对象.专门用于设计可共享对象的一种设计模式叫做享元模式(Flyweight pattern). 实现享元模式需要两个关键组件,通常是可共享的享元对象和保存他们的池.某种中央对象维护这个池,并从它返回适当的实例. 运用共享技术有效地支持大量细粒度的对象. 公共交通(如公共汽车)已有一百多年的历史了.大量去往相同方向的乘客可以分担保有和经营车辆(如公共汽车)的费用.公共汽车有

详解Java设计模式编程中的Flyweight享元模式的开发结构_java

享元(Flyweight)模式:通过共享技术以便有效的支持大量细粒度的对象. 享元模式在阎宏的<java与模式>中分为单纯享元模式和复合享元模式,复合模式的复合享元是不可以共享的,享元对象能做到共享的关键是区分内蕴态(Internal State)和外蕴态( External State).这两个"蕴态"翻译的太难懂,我不是说翻译的不好,可能是我理解能力差,还是<Design Pattern Elements of Reusable Object-Oriented S

总结JavaScript设计模式编程中的享元模式使用_基础知识

享元模式不同于一般的设计模式,它主要用来优化程序的性能,它最适合解决大量类似的对象而产生的性能问题.享元模式通过分析应用程序的对象,将其解析为内在数据和外在数据,减少对象的数量,从而提高应用程序的性能. 基本知识 享元模式通过共享大量的细粒度的对象,减少对象的数量,从而减少对象的内存,提高应用程序的性能.其基本思想就是分解现有类似对象的组成,将其展开为可以共享的内在数据和不可共享的外在数据,我们称内在数据的对象为享元对象.通常还需要一个工厂类来维护内在数据. 在JS中,享元模式主要有下面几个角色