码农小汪-设计模式-享元模式 FlyWeight
2016-04-16 20:06
246 查看
享元模式 就是共享的意思啦
享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。主要解决:在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。
![](http://c.hiphotos.baidu.com/image/pic/item/b03533fa828ba61e82b17dbd4634970a314e59c0.jpg)
享元模式:运用共享技术有效的支持大量细粒度的对象
尽管我们需要共享对象来降低我们的内存的耗损,但是个别的时候有可能是不需要我们去共享的,那个时候不需要共享的子类的存在就是有必要的了,可以解决那些不需要共享子类的问题
下面这个图也是差不多了,描述的不错吗,我们既然要共享我们的怎么知道以前的存在不存在呢,这个就是个简单的原理哦
![](http://my.csdn.net/uploads/201204/24/1335261280_3676.jpg)
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、数据库的数据池。