Nar*_*rek 2 architecture design-patterns flyweight-pattern
我看不出Multiton和Flyweight模式之间有任何单一的区别.请解释一下有什么区别?
模式具有类似的结果,但这几乎是巧合,因为意图不同.
对我来说,flyweight的主要目的是通过共享状态来减少内存.
multition的主要目的是在使用相同的键获取实例时始终具有与返回的对象完全相同的实例(单例).
flyweight的典型示例是在文字处理器中,其中每个字母由对象表示,并且为了避免为每个字母创建许多对象,而是仅存在每个字母的一个实例.
可以通过使用multition来实现这一点,该multition确保对于键'A',返回表示'A'的对象的相同实例.在这种情况下,模式确实看起来都很相似.
但是,flyweight不要求只存在单个实例(对多重模式的要求).因此,也可以使用文字处理器的实现,其中每个文档都有一个每个字母对象的实例.
这仍然会大量减少的内存量,我相信仍然是轻量级模式的实例,但不会不会是multition模式,为字母的许多实例"A"可以在不同的文档存在.
在多重模式不适用的许多其他情况下,您还可以使用flyweight模式来减少内存消耗.这可能不是一个完美的例子,但想象一个系统,它提供学校的学生名单和他们所学的课程.如果您有一个学生对象,其中包含学生所选课程的列表,课程列出了房间,教师,可用设备等.
在幼稚模型中,学生可以拥有一组Class对象,并且每个Class对象将为每个学生创建.您在每个学生上存储了许多对象,这可能需要大量内存.相反,您可以为Class使用flyweight,并且只存储每个接受该类的学生中相同Class实例的引用.这将显着减少存储大量学生所需的内存.
但对于类实例是单身的类本身是驱动和动态(新类可以添加和删除等),所以multition模式不会是一个合适的契合这里的数据可能并不合适.