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;
  • 相关阅读:
    Spring Boot Common application properties(转载)
    SVN中trunk,branches,tags用法详解(转载)
    约定优于配置
    JavaScript封装一个MyAlert弹出框
    JavaScript封装一个实用的select控件
    JavaScript的8行代码搞定js文件引入问题
    JavaScript处理数据完成左侧二级菜单的搭建
    SpringMVC+Mybatis实现的Mysql分页数据查询
    十步完全理解 SQL(转载)
    sql语句练习50题
  • 原文地址:https://www.cnblogs.com/kiminozo/p/2374635.html
Copyright © 2011-2022 走看看