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;
  • 相关阅读:
    尝试使用word发布博客
    设计模式学习系列7 建造者模式
    设计模式学习系列6 原型模式(prototype)
    最近比较闲
    提高程序运行效率的10个简单方法(转)
    设计模式学习系列5 工厂模式
    【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)
    三十分钟掌握STL
    在python包管理中使用easy_install软件的步骤
    【转】推荐给大家的7本游戏开发书
  • 原文地址:https://www.cnblogs.com/kiminozo/p/2374635.html
Copyright © 2011-2022 走看看