前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >享元模式

享元模式

作者头像
JusterZhu
发布2023-10-07 10:10:06
1260
发布2023-10-07 10:10:06
举报
文章被收录于专栏:JusterZhu

1.概要

享元模式是一种结构型设计模式,它的主要思想是共享对象以减少内存使用和提高性能。在该模式中,共享的对象被设计为可共享的,即它们可以在多个上下文中被共享,而不需要在每个上下文中都创建新的实例。享元模式通过共享相似对象的部分状态来实现内存的节省。

实现方式通常包括两个关键部分:

  • 享元工厂(Flyweight Factory):负责创建和管理共享的享元对象。在请求享元对象之前,它会检查是否已经有符合要求的对象存在,如果存在则返回已有对象,否则创建新对象并加入享元池。
  • 具体享元(Concrete Flyweight):实现享元接口,在具体场景中被共享的对象。

适用场景

  • 系统中存在大量相似对象,占用大量内存。
  • 对象的大多数状态可以外部化,并且可以通过相对少量的状态来描述对象。
  • 应用中不可避免地需要大量的对象,但是系统资源有限。

优点

  • 减少内存使用,提高性能,特别适合处理大量相似对象的场景。
  • 外部状态与内部状态分离,使得系统更容易拓展。

缺点

  • 需要额外的管理享元对象的工厂,增加了系统的复杂度。
  • 对象的外部状态需要外部管理,可能影响系统的一致性。

享元模式适用于需要大量相似对象的场景,通过共享对象来节省内存和提高性能。然而,在使用时需要权衡好内部状态和外部状态的划分,以及管理共享对象的复杂性。

详细内容

示例代码

代码语言:javascript
复制
interface IFlyweight
{
    void Operation();
}


class ConcreteFlyweight : IFlyweight
{
    public void Operation()
    {
        Console.WriteLine("具体享元对象的操作");
    }
}

class FlyweightFactory
{
    private Dictionary<string, IFlyweight> flyweights = new Dictionary<string, IFlyweight>();

    public IFlyweight GetFlyweight(string key)
    {
        if (!flyweights.ContainsKey(key))
        {
            flyweights[key] = new ConcreteFlyweight();
        }
        return flyweights[key];
    }
}

class Client
{
    static void Main(string[] args)
    {
        FlyweightFactory factory = new FlyweightFactory();
        IFlyweight flyweight1 = factory.GetFlyweight("key1");
        IFlyweight flyweight2 = factory.GetFlyweight("key1");

        flyweight1.Operation(); // 输出:具体享元对象的操作
        flyweight2.Operation(); // 输出:具体享元对象的操作
    }
}

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-10-06 11:39,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JusterZhu 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.概要
    • 适用场景
      • 优点
        • 缺点
        • 详细内容
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档