首页 > 其他分享 >享元模式

享元模式

时间:2023-05-31 11:23:03浏览次数:35  
标签:享元 string 模式 typefaces key public

一、定义

运用共享技术有效地支持大量细粒度的对象。

二、适用场景

  • 系统会用到大量相同或相似的对象。
  • 对象创建比较耗时。

三、目的

  • 减少创建对象的数量。
  • 对象全局共享。

四、UML类图

  • FlyweightFactory:享元工厂,用来创建并管理Flyweight对象
  • Flyweight:享元类的基类或接口
  • ConcreteFlyweight:具体的Flyweight子类
  • UnsharedConcreteFlyweight:不需要共享的Flyweight子类

五、应用实例

字符串驻留池、线程池、数据库连接池等。

六、优缺点

优点

  • 节省内存空间
  • 提高效率

缺点

          增加了系统的复杂度。

七、与单例模式的区别

  • 享元模式是共享大量类的大量实例,而单例是一个类一个实例。

  • 单例模式针对的是对象的创建,而享元模式针对的是对象的管理。

  • 单例模式不能单独创建,而享元模式可以单独创建。

八、与简单工厂模式的区别

  • 享元模式在简单工厂模式的基础上加入了缓存。
  • 简单工厂模式的作用仅仅是创建对象,而享元模式虽然也创建对象,但其主要作用是管理对象。

九、示例

1.Typeface.cs

public abstract class Typeface
    {
        public abstract string Print();
    }

2.WordTypeface.cs

public class WordTypeface : Typeface
    {
        private readonly string _word;

        public WordTypeface(string word)
        {
            this._word = word;
        }

        public override string Print()
        {
            return this._word;
        }
    }

3.TypefaceFactory.cs

public class TypefaceFactory
    {
//这也可以用redis存 private static readonly IDictionary<string, Typeface> _typefaces = new Dictionary<string, Typeface>(); private static readonly object _locker = new object(); public static void SetTypeface(string key, Typeface typeface) { if (!_typefaces.ContainsKey(key)) { lock (_locker) { if (!_typefaces.ContainsKey(key)) { _typefaces.Add(key, typeface); } } } } public static Typeface GetTypeface(string key) { if (_typefaces.ContainsKey(key)) { return _typefaces[key]; } return null; } }

4.Program.cs

 internal class Program
    {
        static void Main(string[] args)
        {            
            TypefaceFactory.SetTypeface("hello", new WordTypeface("你好"));

            Console.WriteLine(TypefaceFactory.GetTypeface("hello").Print());
        }
    }

运行结果:你好

 

标签:享元,string,模式,typefaces,key,public
From: https://www.cnblogs.com/xiao-wo-niu/p/17445287.html

相关文章

  • 解释器模式(Interpreter Pattern)
    解释器模式(InterpreterPattern)一、定义解释器模式(InterpreterPattern)提供了评估语言的语法或表达式的方式,它属于行为型模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式被用在SQL解析、符号处理引擎等。给定一个语言,定义它的文法的一种表示,并定义......
  • JS的严格模式
    JavaScript的严格模式(StrictMode)是一种在代码中启用的特殊模式,用于提供更严格的语法和错误检查,以改善代码质量和增强安全性。使用严格模式可以帮助大家避免一些常见的错误,并禁用一些不推荐使用的特性。要启用严格模式,可以在代码的顶部或函数体的开头添加以下语句:"usestrict";......
  • Abstract Factory Pattern 抽象工厂模式简介与 C# 示例【创建型】【设计模式来了】
    〇、简介1、什么是抽象工厂模式?一句话解释:  通过对抽象类和抽象工厂的一组实现,独立出一系列新的操作,客户端无需了解其逻辑直接访问。抽象工厂模式(AbstractFactoryPattern)是一种创建型模式。它用于创建一组相关对象的家族。强调的是一组对象之间的协作关系,而不是单个对象之......
  • 范式关系模式
    第一NF---消除部分依赖-->第二NF--消除传递依赖-->第三NF-->决定因素(关系中左边的)要包含主码-->BCNF举例1.AB->D,B->D存在D对主码AB的部分依赖,不符合第二范式,为第一范式改为第三范式:R1(A,B,D)R2(B,D)2.AB->C,AB->D,AD->E,不存在部分依赖,但存在E对主码AB的传递依赖吗,不符合第三......
  • 新版idea快捷键总结学习----(用于java开发模式)
    选择代码区ctrlw如果放到以if开头的语句,可以选择if判断条件所在的代码片段游标在单个单词下时选择单词在选中多个单词时,选择整个字符串三次点击时,如果不在字符串单词下,用于选择{}内的代码片段逐级递增如果在单词下方,用于选择单词所在的字符串并且向外逐级扩展。ctrl......
  • 组合模式
    一、定义将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得对单个对象和组合对象的使用具有一致性。二、应用实例文件系统中的文件与文件夹、Winform中的简单控件与容器控件、XML中的Node和Element等。透明模式透明模式是把组合使用的方法放到抽象类中,使得叶......
  • gof-设计模式
    一、什么是设计模式设计模式(Designpattern)是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。1、创建型......
  • 工厂模式:一个即可简单实现,又可复杂实现的模式
    工厂模式的实现主要分为三种,分别是简单工厂模式(SimpleFactory)、工厂方法模式(FactoryMethod)和抽象工厂模式(AbastractFactory );但是简单工厂模式不属于23种GOF设计模式之一。工厂模式在各种开源框架里使用非常普遍,例如Spring框架大量使用工程模式。下面分别介绍一下这三种实现。0x......
  • 单例模式简单复杂,线程不安全到安全
    0x01:简介说到单例模式,可以说单例模式是最常见,也是最常用的设计模式了。Spring的bean默认就是单例的。虽然单例模式是最简单的设计模式,但是在实现上有多种方式,分别是饿汉式、懒汉式、双重校验锁;在线程安全方面有线程不安全的,也有线程相对安全的。总的来说实现单例模式有以下一些特......
  • 模板模式:一种体现多态的设计模式
    0x01:模板模式模板模式(Template),又叫模板方法模式(TemplateMethod),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需重写方法实现,但调用将以抽象类中定义的方式进行。模板方法模式:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,......