惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Blog of Author Tim Ferriss
S
Securelist
D
Docker
The Register - Security
The Register - Security
GbyAI
GbyAI
Recorded Future
Recorded Future
Engineering at Meta
Engineering at Meta
Stack Overflow Blog
Stack Overflow Blog
云风的 BLOG
云风的 BLOG
P
Proofpoint News Feed
罗磊的独立博客
博客园 - 【当耐特】
F
Full Disclosure
WordPress大学
WordPress大学
腾讯CDC
小众软件
小众软件
大猫的无限游戏
大猫的无限游戏
D
DataBreaches.Net
SecWiki News
SecWiki News
L
Lohrmann on Cybersecurity
I
InfoQ
MyScale Blog
MyScale Blog
量子位
Cyberwarzone
Cyberwarzone
博客园 - 三生石上(FineUI控件)
The Hacker News
The Hacker News
F
Fortinet All Blogs
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Jina AI
Jina AI
博客园_首页
H
Help Net Security
K
Kaspersky official blog
酷 壳 – CoolShell
酷 壳 – CoolShell
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Webroot Blog
Webroot Blog
Blog — PlanetScale
Blog — PlanetScale
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
The Cloudflare Blog
P
Proofpoint News Feed
V
Visual Studio Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
T
Tailwind CSS Blog
爱范儿
爱范儿
P
Privacy International News Feed
Security Archives - TechRepublic
Security Archives - TechRepublic
The GitHub Blog
The GitHub Blog
C
Cybersecurity and Infrastructure Security Agency CISA
B
Blog RSS Feed

博客园 - kiminozo

UAP如何根据DeviceFamily显示不同的页面 Windows 10 响应式设计和设备友好的开发 Windows Phone Toolkit for WP8 已经出了 代码分享 ScrollViewerListener 获取ScrollViewer的位置改变 经验 C#手动同步的滥用实例 WP7技巧 扩展【共享...】按钮 Bangumi 番組計劃 WP手机客户端发布 WP7进阶技巧 自定义Toast 提示动画效果 WP7自定义控件 TabSwitch控件 模拟Windows phone 开始菜单的瓦片动画 WP7自定义控件 评分控件 WP7应用开发笔记 TiltEffect为控件添加倾斜的触控响应效果 WP7应用开发笔记 继承BitmapSource并使用独立存储来缓存远程的图片 用代理类包装异步调用方法实现异步命令 解决log4net在.net 4.0 ClientProfile下无法使用 从FLC中学习的设计模式系列-结构型模式(2)-装饰 从FLC中学习的设计模式系列-结构型模式(1)-适配器 从FLC中学习的设计模式系列-创建型模式(5)-原型 从FLC中学习的设计模式系列-创建型模式(4)-建造者
从FLC中学习的设计模式系列-结构型模式(3)-享元模式
kiminozo · 2012-02-29 · via 博客园 - kiminozo

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

享元模式

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;