您的位置:首页 > 职场人生

码农小汪-设计模式-享元模式 FlyWeight

2016-04-16 20:06 246 查看

享元模式 就是共享的意思啦

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。

主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。



享元模式:运用共享技术有效的支持大量细粒度的对象

尽管我们需要共享对象来降低我们的内存的耗损,但是个别的时候有可能是不需要我们去共享的,那个时候不需要共享的子类的存在就是有必要的了,可以解决那些不需要共享子类的问题

下面这个图也是差不多了,描述的不错吗,我们既然要共享我们的怎么知道以前的存在不存在呢,这个就是个简单的原理哦



Flyweight享元设计模式有两个重要概念:

以文字处理软件中对象为例

内部状态intrinsic:可以共享的对象,如相同的字。

外部状态extrinsic:不能共享的对象,如每个字的位置,大小等等。

Flyweight享元设计模式使用对象池存放内部对象,当需要内部对象时首先判断对象池中是否存在,如果存在直接返回,如果不存在创建一个对象放入对象池中返回。

class Book{
private String title;
private float price;
private Author author;
public String getTitle(){
return title;
}
public float getPrice(){
return price;
}
public Author getAuthor(){
return author;
}
}
//将Author作者类设计为可共享的享元
class Author{
//内部状态
private String name;
public String getName(){
return name;
}
public Author(String name){
this.name = name;
}
}
//享元工厂
public class AuthorFactory{
private static Map<String, Author> authors = new HashMap<String, Author>();
public static Author getAuthor(String name){
Author author = authors.get(name);
if(author == null){
author = new Author(name);
authors.put(name, author);
}
return author;
}
}


应用实例: 1、JAVA 中的 String,如果有则返回,如果没有则创建一个字符串保存在字符串缓存池里面。 2、数据库的数据池。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: