- 浏览: 503819 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (329)
- [发布至博客园首页] (12)
- [随笔分类][01] .Net X (59)
- [随笔分类][20] Architecture (16)
- [随笔分类][21] Developer Logs (13)
- [网站分类]Windows 7 (1)
- [随笔分类][13] Oracle & .Net (7)
- [随笔分类][16] Love in China (14)
- [随笔分类][15] Development Tools (20)
- [随笔分类][18] Windows Phone (12)
- [随笔分类][12] Design & Pattern (17)
- [网站分类].NET新手区 (22)
- [网站分类]首页候选区 (2)
- [随笔分类][08] Windows (Server) (13)
- [随笔分类][02] CSLA.Net (3)
- [随笔分类][10] jQuery & javaScript (10)
- [随笔分类][11] SQL Server (4)
- [随笔分类][22] Enterprise Logs (3)
- [随笔分类][03] News (9)
- [随笔分类][19] Quality Assurance (2)
- [随笔分类][05] Silverlight (20)
- [随笔分类][14] Google Earth & .Net (6)
- [网站分类]非技术区 (9)
- [随笔分类][07] WWF (2)
- [随笔分类][04] SharePoint (1)
- [随笔分类][20] Analysis & Design (36)
- [随笔分类][06] WCF (5)
- [随笔分类][12] Architecture (1)
- [随笔分类][09] WPF (0)
- [随笔分类][17] VStudio & Expression (5)
最新评论
-
zhangyy130:
你好,我关于第二段的那个表视图、模型与图这三者的关系我没有看明 ...
UML模型的组成 -
guji528:
谢谢分享!
Enterprise Architect 基础应用 -
studentsky:
好文章,图文并茂!
WCF 第一个用 Visual Studio 2010 创建的WCF服务 -
chen975311486:
用哪个工具画的????
UML中对关系的描述 (二) -
frankies:
继续学习中。。
UML 交互概述图
重点概念
1. 这个模式相对简单。享元模式,就是在工厂中包含所要共享的元素实例,多个对象通过发给这个工厂所需要对象的标记,获得同一个实例,这样多个对象的操作只需要一个对象实例即可,看基础代码示例。
2. 内部状态(共享对象)和外部状态(个性化部分)(代码示例见后面网站第三版)
核心意思,是需要改变的内容部分,可以作为参数传递给方法,而对象本身依然是一个。
3. 如果一个应用程序使用了大量的对象,而大量的这些对象造成了很大的内存开销时可以考虑使用享元模式
4. 对象的大多数状态可以外部状态,如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象,此时可以考虑使用享元模式。
5. 享元模式节约内存开销,减少对象实例化个数。
示例程序
using System; using System.Collections.Generic; using System.Collections; using System.Text; namespace 享元模式 { class Program { static void Main(string[] args) { int extrinsicstate = 22; FlyweightFactory f = new FlyweightFactory(); Flyweight fx = f.GetFlyweight("X"); fx.Operation(--extrinsicstate); Flyweight fy = f.GetFlyweight("Y"); fy.Operation(--extrinsicstate); Flyweight fz = f.GetFlyweight("Z"); fz.Operation(--extrinsicstate); UnsharedConcreteFlyweight uf = new UnsharedConcreteFlyweight(); uf.Operation(--extrinsicstate); Console.Read(); } } class FlyweightFactory { private Hashtable flyweights = new Hashtable(); public FlyweightFactory() { flyweights.Add("X", new ConcreteFlyweight()); flyweights.Add("Y", new ConcreteFlyweight()); flyweights.Add("Z", new ConcreteFlyweight()); } public Flyweight GetFlyweight(string key) { return ((Flyweight)flyweights[key]); } } abstract class Flyweight { public abstract void Operation(int extrinsicstate); } class ConcreteFlyweight : Flyweight { public override void Operation(int extrinsicstate) { Console.WriteLine("具体Flyweight:" + extrinsicstate); } } class UnsharedConcreteFlyweight : Flyweight { public override void Operation(int extrinsicstate) { Console.WriteLine("不共享的具体Flyweight:" + extrinsicstate); } } }
网站,第三版
using System; using System.Collections.Generic; using System.Collections; using System.Text; namespace 享元模式 { class Program { static void Main(string[] args) { WebSiteFactory f = new WebSiteFactory(); WebSite fx = f.GetWebSiteCategory("产品展示"); fx.Use(new User("小菜")); WebSite fy = f.GetWebSiteCategory("产品展示"); fy.Use(new User("大鸟")); WebSite fz = f.GetWebSiteCategory("产品展示"); fz.Use(new User("娇娇")); WebSite fl = f.GetWebSiteCategory("博客"); fl.Use(new User("老顽童")); WebSite fm = f.GetWebSiteCategory("博客"); fm.Use(new User("桃谷六仙")); WebSite fn = f.GetWebSiteCategory("博客"); fn.Use(new User("南海鳄神")); Console.WriteLine("得到网站分类总数为 {0}", f.GetWebSiteCount()); //string titleA = "大话设计模式"; //string titleB = "大话设计模式"; //Console.WriteLine(Object.ReferenceEquals(titleA, titleB)); Console.Read(); } } //用户 public class User { private string name; public User(string name) { this.name = name; } public string Name { get { return name; } } } //网站工厂 class WebSiteFactory { private Hashtable flyweights = new Hashtable(); //获得网站分类 public WebSite GetWebSiteCategory(string key) { if (!flyweights.ContainsKey(key)) flyweights.Add(key, new ConcreteWebSite(key)); return ((WebSite)flyweights[key]); } //获得网站分类总数 public int GetWebSiteCount() { return flyweights.Count; } } //网站 abstract class WebSite { public abstract void Use(User user); } //具体的网站 class ConcreteWebSite : WebSite { private string name = ""; public ConcreteWebSite(string name) { this.name = name; } public override void Use(User user) { Console.WriteLine("网站分类:" + name + " 用户:" + user.Name); } } }
发表评论
-
理解软件外包的种类
2009-12-17 21:11 552包项目 包人 包时间 -
解释器模式(Interpreter)
2009-12-20 14:02 617重要概念 1. 给定一个语言,定义它的文法的一种表示,并定义 ... -
访问者模式(Visitor)
2009-12-20 16:13 758重点概念 1. 双分派:得到执行的操作决定于请求的种类和接收 ... -
观察者(发布订阅)模式 与 委托事件
2009-12-02 17:07 998多一些宽容 重点概念 1. 开放封闭原则,修改原有代码就说 ... -
抽象工厂模式(Abstract Factory)
2009-12-02 22:20 1051开闭原则和依赖倒置原则是面向对象设计的重点,编程是一门艺术,大 ... -
状态模式(State)
2009-12-03 17:53 678重点概念 1. 方法内容如果过长其实就有可能出了问题。 2. ... -
适配器模式(Adapter)
2009-12-03 22:59 714适配器模式比较简单常 ... -
备忘录模式(Memento)
2009-12-06 10:59 721重点概念 1. 希望把存取状态的细节封装起来,而且最好是封装 ... -
组合模式(Composite)
2009-12-06 15:39 616重要概念 1. 将对象组合成树形结构以表示‘部分-整体’的层 ... -
迭代器模式(Iterator)
2009-12-06 16:48 906C# 中已经实现了迭代器功能, foreach in 和 IE ... -
单例模式(Singleton)
2009-12-06 19:55 786重点概念 1. 所有类都有构造方法,不编码则系统默认生成空的 ... -
大型网站性能优化的通用方法
2009-12-10 12:56 7771、HTML静态化其实大家 ... -
桥接模式(Bridge)与合成/聚合复用原则(CARP)
2009-12-13 12:40 1050重要概念 1.合成/聚合 ... -
命令模式(Command)
2009-12-13 14:16 752重要概念 1.命令抽象类,也是命令模式的核心理解 2. ... -
职责链模式(Chain of Responsibility)
2009-12-13 16:13 1092重要概念 1. 使多个对象都有机会处理请求,从而避免请求的发 ... -
依赖倒转(依赖倒置)原则
2009-11-30 15:23 7681. 抽象不应该依赖细节,细节应该依赖于抽象(接口,抽象类)。 ... -
装饰模式(Decorator)
2009-11-30 18:32 777重点概念 1. 把所需的功能按正确的顺序串联起来进行控制。 ... -
代理模式(Proxy)
2009-11-30 21:55 715大话设计模式讲的和连环画一样,还可以接上,作者真用心,看起来很 ... -
工厂方法模式(Factory Method)
2009-12-01 10:57 905重要概念 本章内容围绕简单工厂与工厂方法的比较很好的说明了工 ... -
原型模式(Prototype)
2009-12-01 12:53 714重要概念回顾 1. 原型 ...
相关推荐
享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...
享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少创建大量小对象所带来的内存开销。通过共享对象,享元模式能够有效地支持大量细粒度的对象,减少内存使用并提高性能。它常用于需要大量重复对象的场景...
享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...
享元模式(Flyweight Pattern)是软件设计中的一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,以此来降低内存中对象的数量。在PHP中实现享元模式,可以帮助我们优化程序性能,特别是在对象数目过多时,...
在“Flyweight”这个文件中,我们可以预期找到的是一个关于享元模式的代码实现。这个文件可能包含了一个享元接口,若干个实现了该接口的具体享元类,以及一个享元工厂类。享元接口定义了对外暴露的方法,这些方法...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...
享元模式的核心是Flyweight类,它是需要被共享的对象,通常包含两个部分:内在状态(Intrinsic State)和外在状态(Extrinsic State)。内在状态是指对象内部不变的部分,可以在多个对象之间共享;外在状态是随环境...
享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...
复合享元模式则引入了享元工厂(Flyweight Factory)来管理和创建享元对象。享元工厂负责管理享元对象池,并根据需要向客户端提供享元对象。当请求的对象不在池中时,工厂会创建新的享元对象;如果存在相同的内蕴...
C++设计模式之享元模式(Flyweight) C++设计模式之享元模式(Flyweight)是一种结构型设计模式,主要用于解决大量相似对象的创建和操作所带来的内存负载问题。该模式的主要设计目标是通过共享对象来减少内存负载,...
享元模式是软件工程中一种用于优化性能的设计模式,它通过共享相似对象的实例来减少内存使用或者计算的开销。在JavaScript编程中,尤其是处理DOM操作和大量相似对象时,享元模式的使用尤为关键。 享元模式的主要...
"Flyweight"(享元)设计模式是一种结构型模式,其核心目的是为了有效地支持大量细粒度对象的创建和使用,通过共享已经存在的对象来减少内存消耗,提高系统性能。在C#中,Flyweight模式尤其适用于那些内部状态可共享...
享元模式的核心是享元对象(Flyweight),它是一个可以被共享的类,通常包含一些共享状态(Static State)和不共享状态(External State)。共享状态是在所有享元对象之间共享的数据,它们不会因对象的不同而改变;...
在Java中实现享元模式时,通常会结合使用`Flyweight`接口和`Concrete Flyweight`类,以及一个`FlyweightFactory`类或方法。`FlyweightFactory`通常维护一个享元对象池,当客户端请求一个享元对象时,工厂首先检查...
享元模式是一种经典的设计模式,属于结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在许多场景下,特别是计算机编程中,我们可能会遇到大量的相似对象,比如在图形...
享元模式(Flyweight Pattern)是设计模式中的一种优化模式,主要用于减少创建大量相似对象所需的内存消耗。在C++程序设计中,当系统中存在大量的相同或相似的对象时,使用享元模式可以有效地降低内存占用,提高系统...
在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部...在享元模式中通常会出现工厂模式,需要创建一个享元工厂来负责维护一个享元池(Flyweight Pool)用于存储具有相同内部状态的享元对象。
1. **抽象享元(Flyweight)**:这是享元模式的接口,定义了所有享元对象公共的行为。 2. **具体享元(Concrete Flyweight)**:实现了抽象享元接口,提供了具体的业务逻辑。这些对象是可以共享的,并且通常存储在一...