VS 2008

应用程序中,当需要提供某种大量细粒度对象的访问,并且对这些对象可以抽象出不可变的属性,那么可以将抽象出来的对象设计为享元,供各个客户端共享访问,以节省内存开销。
而剩下的不能共享的属性,则可以由客户端维护,并在需要的时候传入享元,传入的不能共享的属性不能影响内部的不可变属性。

1. 模式UML图

Core Design Patterns(5) Flyweight 享元模式

2. 应用

    目前的应用程序探测系统中,需要对许多应用程序进行探测,探测各种可能出现的异常,探测到异常后,需要将异常抛出,既告诉探测程序当前发生异常的应用程序的信息以及异常消息。
    考虑使用享元模式,使得对于同一个应用程序的多个线程共享应用程序信息。

Core Design Patterns(5) Flyweight 享元模式
示意性代码:

IAlarmEventArgs

Core Design Patterns(5) Flyweight 享元模式using System;
Core Design Patterns(5) Flyweight 享元模式
using System.Collections.Generic;
Core Design Patterns(5) Flyweight 享元模式
using System.Linq;
Core Design Patterns(5) Flyweight 享元模式
using System.Text;
Core Design Patterns(5) Flyweight 享元模式
}

AlarmEventArgs

Core Design Patterns(5) Flyweight 享元模式using System;
Core Design Patterns(5) Flyweight 享元模式
using System.Collections.Generic;
Core Design Patterns(5) Flyweight 享元模式
using System.Linq;
Core Design Patterns(5) Flyweight 享元模式
using System.Text;
Core Design Patterns(5) Flyweight 享元模式

AlarmEventArgsFactory

Core Design Patterns(5) Flyweight 享元模式using System;
Core Design Patterns(5) Flyweight 享元模式
using System.Collections.Generic;
Core Design Patterns(5) Flyweight 享元模式
using System.Linq;
Core Design Patterns(5) Flyweight 享元模式
using System.Text;
Core Design Patterns(5) Flyweight 享元模式

Client

Core Design Patterns(5) Flyweight 享元模式using System;
Core Design Patterns(5) Flyweight 享元模式
using System.Collections.Generic;
Core Design Patterns(5) Flyweight 享元模式
using System.Linq;
Core Design Patterns(5) Flyweight 享元模式
using System.Text;
Core Design Patterns(5) Flyweight 享元模式
using DesignPattern.Flyweight.BLL;
Core Design Patterns(5) Flyweight 享元模式

Output

Core Design Patterns(5) Flyweight 享元模式

3. 思考

关于intrinsic state和extrinsic state
确保我们共享的是前者,而后者只在客户端维护,并在需要的时候才传入享元
并且后者传入享元后不会影响到前者

相关文章:

  • 2021-05-06
  • 2021-12-07
  • 2021-06-22
  • 2021-11-13
猜你喜欢
  • 2021-12-05
  • 2021-07-30
  • 2021-11-01
  • 2021-11-19
  • 2022-01-02
相关资源
相似解决方案