`
zha_zi
  • 浏览: 592554 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

Flyweight Pattern(享元模式)

 
阅读更多

 

享元模式的特点是,复用我们内存中已存在的对象,降低系统创建对象实例

的性能消耗

    我们来给出个简单的享元模式的应用前后的对比图,大概我们就知道享元模式的重要作用了。

    我们这里以绘制一个有样式的字体来说明吧,有的时候我们想绘制一个纯色的文字,比如红色,那么我们可能需要创建很多的实例,通常来说,这些

实例的差别不大,这个时候,我们可以考虑复用其中创建的某个实例,而不用去new这么多相同的对象,来完成这样的工作。我们下面以这个例子来说

明,使用享元模式的前后对比的情况。

    使用享元模式前:

    image

    使用享元模式后:

    image

 

 

四、享元模式的特点及使用场景

      4.1、享元模式的特点

      享元模式的意图是通过共享有效支持大量细粒度的对象,来提供应用程序的性能,节省系统中重复创建对象实例的性能消耗,这个怎么理解呢?其实就是以下几点的含义:

1、当我们系统中某个对象类型的实例较多的情况。

2、并且要求这些实例进行分类后,发现真正有区别的分类很少的情况。

      例如我们的生活中很多的场景,我们在使用拼音输入的法的时候,如果说我们每个字都是new一个对象实例的操作的话,那么内存中的实例就太可

怕,这个时候,我们是不是可以考虑将这些重复的字体在内存中只是创建一次,而是通过复用对象的形式,来组织一些可能有多个字符重复的内容呢?

也许这是一个不错的主意,我们来看看这个示例的过程吧。

   4.2、享元模式的使用场景

         1、当我们发现某个类型的对象有大量的实例时,我们是否可以对这些实例进行分类,经过分类后,我们发现只有很少的类别的情况下。

         2、我们发现通过使用享元模式后能够提高系统的性能和不会带来更多的复杂度时。

      享元模式一般是给出本地内存资源节省的一个方案,并不适合互联网上的分布式应用的情况,不过享元模式对于排他性的要求资源的控制,是个不

错的选择的。

四、享元模式的特点及使用场景

      4.1、享元模式的特点

      享元模式的意图是通过共享有效支持大量细粒度的对象,来提供应用程序的性能,节省系统中重复创建对象实例的性能消耗,这个怎么理解呢?其实就是以下几点的含义:

1、当我们系统中某个对象类型的实例较多的情况。

2、并且要求这些实例进行分类后,发现真正有区别的分类很少的情况。

      例如我们的生活中很多的场景,我们在使用拼音输入的法的时候,如果说我们每个字都是new一个对象实例的操作的话,那么内存中的实例就太可

怕,这个时候,我们是不是可以考虑将这些重复的字体在内存中只是创建一次,而是通过复用对象的形式,来组织一些可能有多个字符重复的内容呢?

也许这是一个不错的主意,我们来看看这个示例的过程吧。

image

      4.2、享元模式的使用场景

         1、当我们发现某个类型的对象有大量的实例时,我们是否可以对这些实例进行分类,经过分类后,我们发现只有很少的类别的情况下。

         2、我们发现通过使用享元模式后能够提高系统的性能和不会带来更多的复杂度时。

      享元模式一般是给出本地内存资源节省的一个方案,并不适合互联网上的分布式应用的情况,不过享元模式对于排他性的要求资源的控制,是个不

错的选择的。

 

public class FontBase
    {
        private List<string> font = new List<string>();

        private string fontName;
        public FontBase(string name)
        {
            this.fontName = name;
        }

        public FontBase AddFont(string font)
        {
            this.font.Add(font);
            return this;
        }
        public virtual string FontName
        {
            get
            {
                return this.fontName;
            }
        }
    }
 具体的文字类型类:
    public class ChineseFont : FontBase
    {
        public ChineseFont()
            : base("ChineseFont")
        {
            base.AddFont("ChineseFont");
        }
    }

    public class EnglishFont : FontBase
    {
        public EnglishFont()
            : base("EnglishFont")
        {
            base.AddFont("EnglishFont");
        }
    }
 具体的创建工厂类:
    public class FontFactory
    {
        private  Dictionary<string, FontBase> fonts = new Dictionary<string, FontBase>();

        public  FontBase Create(string name)
        {
            FontBase fontBase = fonts[name];
            if (fontBase != null)
                return fontBase;

            fontBase = (FontBase)Activator.CreateInstance(Type.GetType(name));

            return fontBase;
        }
    }

 通过上面实例的讲解我们知道,我们通过缓存对象类型的形式来控制对象实例的创建过程,经典的模式中没有体现共享的状态,比如说我们在外部可能对于

享元对象来说是不共享的,内部是共享的

分享到:
评论

相关推荐

    设计模式(C#)之享元模式(Flyweight Pattern)

    享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...

    C++设计模式课件13_Flyweight_享元模式.pdf

    享元模式(Flyweight Pattern)是设计模式中的一种优化模式,主要用于减少创建大量相似对象所需的内存消耗。在C++程序设计中,当系统中存在大量的相同或相似的对象时,使用享元模式可以有效地降低内存占用,提高系统...

    享元模式flyweight

    享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...

    c++-设计模式之享元模式(Flyweight)

    享元模式(Flyweight Pattern)是一种结构型设计模式,用于减少创建大量小对象所带来的内存开销。通过共享对象,享元模式能够有效地支持大量细粒度的对象,减少内存使用并提高性能。它常用于需要大量重复对象的场景...

    学习php设计模式 php实现享元模式(flyweight)

    享元模式(Flyweight Pattern)是软件设计中的一种结构型设计模式,它通过共享技术来支持大量细粒度的对象,以此来降低内存中对象的数量。在PHP中实现享元模式,可以帮助我们优化程序性能,特别是在对象数目过多时,...

    享元模式1

    享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的创建,降低系统资源的开销和内存压力。该模式通过共享已经存在的对象来大幅减少需要创建的对象数量,避免创建大量相似类带来的开销,...

    C#版 24种设计模式

    适配器模式(Adapter Pattern) 提供者模式(Provider Pattern) 外观模式(Facade Pattern) 享元模式(Flyweight Pattern) 原型模式(Prototype Pattern) 责任链模式(Chain of Responsibility Pattern) 中介者模式...

    6.设计模式-享元模式1

    享元模式(Flyweight Pattern)是结构型模式的一种,主要用于减少大量相似对象的内存占用,提高系统的性能和效率。 模式定义 享元模式的定义是:运用共享技术有效地支持大量细粒度的对象。该模式将一个对象的状态...

    装饰器模式、原型模式、享元模式

    **享元模式(Flyweight Pattern)** 享元模式是一种用于节省内存的结构型设计模式,它通过共享大量细粒度对象来减少内存消耗。享元模式通常用于处理大量相似对象的场景,例如在文本编辑器中处理字符、在图形渲染中...

    2 享元模式-MOOC课程内容.pdf

    享元模式(Flyweight Pattern)是一种结构型设计模式,旨在通过共享来高效地支持大量细粒度对象的使用,减少内存使用或计算时间。享元模式可以有效地支持大量对象的复用,使程序尽可能减少创建对象的次数,从而降低...

    用Java实现23种设计模式

    享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3. 行为型模式 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式(Interpreter Pattern) 迭代器模式...

    Java 23种设计模式15享元模式.pdf

    享元模式(Flyweight Pattern)是一种对象结构型设计模式,它的主要目的是通过共享技术来有效地支持大量细粒度对象的复用。在享元模式下,系统仅使用少量相似但状态变化不大的对象,这些对象可以被多次复用,极大地...

    常见设计模式的解读和对应代码示例,包括设计原则和软件工程中类之间的依赖关系

    1、基础概念 1.2 类间关系 关联关系(Association) 聚合关系(Aggregation) 组合关系(Composition) 依赖关系(Dependency) 泛化关系(Generalization) 实现关系(Realization) ...享元模式(Flyweight Pattern)

    Python设计模式之享元模式原理与用法实例分析

    享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象. 下面是一个享元模式的demo: #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'Andy' """ 大话设计模式 设计模式——享元模式 ...

    33种JAVA设计模式DEMO

    享元模式(Flyweight Pattern) 代理模式(Proxy Pattern) 3 行为型模式 这些设计模式特别关注对象之间的通信。 责任链模式(Chain of Responsibility Pattern) 命令模式(Command Pattern) 解释器模式...

    C#设计模式_设计模式_C#_

    享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. ...

    设计模式PPT

     享元模式(Flyweight Pattern)  代理模式(Proxy Pattern) 行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:  责任链模式(Chain of Responsibility Pattern)  ...

    designPattern8:设计模式:享元模式,享元模式(分享网站代码),享元模式(内部和外部)

    在这个名为"designPattern8"的压缩包中,我们可以深入探讨享元模式的原理、应用场景以及如何在实际项目中实现它。 享元模式的核心思想是运用共享技术有效地支持大量细粒度的对象。通常,这些对象具有许多相同的属性...

    ackFinding#ARTS#第五周 享元模式在jdk应用1

    1.简介享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。2.举例当使用Integer.valueOf创建对象

Global site tag (gtag.js) - Google Analytics