zoukankan      html  css  js  c++  java
  • 从FLC中学习的设计模式系列结构型模式(3)享元模式

    享元模式是使用共享部件减少内存占用

    享元模式

    http://zh.wikipedia.org/wiki/享元模式

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

    典型的享元模式的例子为文书处理器中以图形结构来表示字符。一个做法是,每个字形有其字型外观, 字模 metrics, 和其它格式资讯,但这会使每个字符就耗用上千字节。取而代之的是,每个字符参照到一个共享字形物件,此物件会被其它有共同特质的字符所分享;只有每个字符(文件中或页面中)的位置才需要另外储存。

    FCL中的享元模式

    在绘图时常有的Brushes和Pens的各个公共属性都是享元模式的典型。

    注意虽然Colors类似,但Color是结构,不存在共享,所以不是享元模式

    就拿Brushes类举例:

    Brushes 类
    实现一组预定义的 SolidColorBrush 对象。

    属性有一大堆:颜色名如:
    AliceBlue 获取具有十六进制值 #FFF0F8FF 的纯色填充颜色。 
    AntiqueWhite 获取具有十六进制值 #FFFAEBD7 的纯色填充颜色。 
    Aqua 获取具有十六进制值 #FF00FFFF 的纯色填充颜色。 
    Aquamarine 获取具有十六进制值 #FF7FFFD4 的纯色填充颜色。 
    Azure 获取具有十六进制值 #FFF0FFFF 的纯色填充颜色。 
    Beige 获取具有十六进制值 #FFF5F5DC 的纯色填充颜色。 
    Bisque 获取具有十六进制值 #FFFFE4C4 的纯色填充颜色。 
    Black 获取具有十六进制值 #FF000000 的纯色填充颜色。

    ...

    下面来看看怎么使用享元

    假设有N个glyphs图形,需要让他们都成为黑色Black:

    glyphs1.Fill = new SolidColorBrush(Colors.Black );
    
    glyphs2.Fill = new SolidColorBrush(Colors.Black );
    
    glyphs3.Fill = new SolidColorBrush(Colors.Black );
    
    ..
    
    glyphsN.Fill = new SolidColorBrush(Colors.Black );

    发现SolidColorBrush严重浪费内存,使用Brushes 提供的Black共享SolidColorBrush,修改后如下:

    glyphs1.Fill = SolidColorBrush.Black;
    
    glyphs2.Fill = SolidColorBrush.Black;
    
    glyphs3.Fill = SolidColorBrush.Black;
    
    ..
    
    glyphsN.Fill = SolidColorBrush.Black;
  • 相关阅读:
    null in ABAP and nullpointer in Java
    SAP ABAP SM50事务码和Hybris Commerce的线程管理器
    Hybris service layer和SAP CRM WebClient UI架构的横向比较
    SAP ABAP和Linux系统里如何检查网络传输的数据量
    SAP CRM WebClient UI和Hybris的controller是如何被调用的
    SAP CRM和Cloud for Customer订单中的业务伙伴的自动决定机制
    SAP CRM WebClient UI和Hybris CommerceUI tag的渲染逻辑
    SAP BSP和JSP页面里UI元素的ID生成逻辑
    微信jsapi支付
    微信jsapi退款操作
  • 原文地址:https://www.cnblogs.com/kiminozo/p/2374635.html
Copyright © 2011-2022 走看看