结构型设计模式之享元模式

结构
意图 运用共享技术有效地支持大量细粒度的对象。
适用性
  • 一个应用程序使用了大量的对象。
  • 完全由于使用大量的对象,造成很大的存储开销。
  • 对象的大多数状态都可变为外部状态。
  • 如果删除对象的外部状态,那么可以用相对较少的共享对象取代很多组对象。
  • 应用程序不依赖于对象标识。由于F l y w e i g h t 对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。

 1  using System;
 2     using System.Collections;
 3
 4     class FlyweightFactory
 5     {
 6         private ArrayList pool = new ArrayList();
 7
 8         // the flyweightfactory can crete all entries in the pool at startup
 9         // (if the pool is small, and it is likely all will be used), or as
10         // needed, if the pool si large and it is likely some will never be used
11         public FlyweightFactory()
12         {
13             pool.Add(new ConcreteEvenFlyweight());
14             pool.Add(new ConcreteUnevenFlyweight());
15         }
16
17         public Flyweight GetFlyweight(int key)
18         {
19             // here we would determine if the flyweight identified by key
20             // exists, and if so return it. If not, we would create it.
21             // As in this demo we have implementation all the possible
22             // flyweights we wish to use, we retrun the suitable one.
23             int i = key % 2;
24             return((Flyweight)pool[i]);
25         }
26     }
27
28     abstract class Flyweight
29     {
30         abstract public void DoOperation(int extrinsicState);
31     }
32
33     class UnsharedConcreteFlyweight : Flyweight
34     {
35         override public void DoOperation(int extrinsicState)
36         {
37
38         }
39     }
40
41     class ConcreteEvenFlyweight : Flyweight
42     {
43         override public void DoOperation(int extrinsicState)
44         {
45             Console.WriteLine("In ConcreteEvenFlyweight.DoOperation: {0}", extrinsicState);
46         }
47     }
48
49     class ConcreteUnevenFlyweight : Flyweight
50     {
51         override public void DoOperation(int extrinsicState)
52         {
53             Console.WriteLine("In ConcreteUnevenFlyweight.DoOperation: {0}", extrinsicState);
54         }
55     }
56
57     /// <summary>
58     ///    Summary description for Client.
59     /// </summary>
60     public class Client
61     {
62         public static int Main(string[] args)
63         {
64             int[] data = {1,2,3,4,5,6,7,8};
65
66             FlyweightFactory f = new FlyweightFactory();
67
68             int extrinsicState = 3;
69             foreach (int i in data)
70             {
71                 Flyweight flyweight = f.GetFlyweight(i);
72                   flyweight.DoOperation(extrinsicState);
73             }
74
75             return 0;
76         }
77     }

享元模式

时间: 2025-01-07 13:02:37

结构型设计模式之享元模式的相关文章

java-设计模式(结构型)-【享元模式】

1.享元模式(Flyweight) 定义:享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用.   1.1 工厂 //工厂:内置一个池,如果存在了则取出,否则则创建加入池中 public class FactoryPool { private Hashtable<String,Person> pool=new Hashtable<String,Person>(); public Person getPerson(String

设计模式之享元模式

Flyweight在拳击比赛中指最轻量级,即"蝇量级"或"雨量级",这里选择使用"享元模式"的意译,是因为这样更能反映模式的用意.享元模式是对象的结构模式.享元模式以共享的方式高效地支持大量的细粒度对象. Java中的String类型 在JAVA语言中,String类型就是使用了享元模式.String对象是final类型,对象一旦创建就不可改变.在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝.Stri

纵横之设计模式(享元模式-性能与对象访问)

声明:本系列文章内容摘自<iOS设计模式> 享元模式:运用共享技术有效地支持大量细粒度的对象. 何为享元模式 实现享元模式需要两个关键组件,通常是可共享的享元对象和保存它们的池.某种中央对象维护这个池,并从它返回适当的实例,工厂是这一角色的理想候选.它可以通过一个工厂方法,根据父类型返回各种类型的具体享元对象.其主要目的就是维护池中的享元对象,并适当的从中返回享元对象. 何时使用享元模式 1.应用程序使用很多对象: 2.在内存中保存对象会影响内存性能: 3.对象的多处持有状态(外在状态)可以放

Java设计模式之享元模式实例详解

本文实例讲述了Java设计模式之享元模式.分享给大家供大家参考,具体如下: 解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象.比如说一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象.如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了.那么如果要是每个字母都共享一个对象,那么就大大节约了资源. 在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweigh

设计模式-12 享元模式(结构型模式)

一 享元模式 享元模式的主要目的是实现对象的共享,即共享池,当系统中对象多的时候可以减少内存的开销,通常与工厂模式一起使用. 主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建. 关键代码:存储相似的对象 使用场景: 1.系统有大量相似对象. 2.需要缓冲池的场景. 类图 : 二 实现代码 Java里面的JDBC连接池,适用于作共享的一些个对象,他们有一些共有的属性,就拿数据库连接 池来说,url.driv

设计模式之享元模式(结构型)

模式定义 享元模式(Flyweight Pattern)就是通过共享技术实现大量细粒度对象的复用.享元模式是通过细粒度对象的共享,所以也可以说享元模式是一种轻量级模式.按照Gof模式分类,享元模式属于对象结构型模式. 模式解释 可以共享的内容称为内部状态(Intrinsic State),需要外部环境设置的不能共享的内容称为外部状态(Extrinsic State).享元模式需要创建一个享元工厂负责维护享元池(Flyweight Pool),享元池用于存储具有相同内部状态的享元对象. 享元模式中

Head First设计模式之享元模式(蝇量模式)

一.定义 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象.我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式.由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象. 二.结构 三.实现 namespace DesignPattern

【设计模式】享元模式

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能.这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式. 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象.我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式.由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象. 介绍 意图:运用共享技术有效地支持大量细粒度的对象. 主要解决:在有大量对象

设计模式之享元模式(Flyweight)摘录

23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于怎样创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而一个对象创建型模式将实例化托付给还有一个对象.创建型模式有两个不断出现的主旋律.第一,它们都将关于该系统使用哪些详细的类的信息封装起来.第二,它们隐藏了这些类的实例是怎样被创建和放在一起的.整个系统关于这些对象所知道的是由抽象类所定义的接口.因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,