常用设计模式-享元模式
来源:互联网 发布:java技术课程表 编辑:程序博客网 时间:2024/05/29 15:04
享元模式:
在有大量对象时,有可能会造成内存溢出,我们把其中共同的部分抽象出来,如果有相同的业务请求,直接返回在内存中已有的对象,避免重新创建。
单纯享元模式所涉及到的角色如下:
● 抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法。
● 具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。
● 享元工厂(FlyweightFactory)角色 :本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。
享元模式例子:
public interface Website { public void use(String name);}
public class ConcreteWebsite implements Website{private String state="";public ConcreteWebsite(String state){this.state=state;}@Overridepublic void use(String name) {System.out.println("功能:"+this.state);System.out.println("用户:"+name);}}
public class WebsiteFactory {private Hashtable<String, Website> flyweights=new Hashtable<String, Website>();public Website getWebsiteCategory(String state){Website fly=flyweights.get(state);if(fly==null){fly=new ConcreteWebsite(state);flyweights.put(state, fly);}return fly;}public int getWebsiteCount(){return flyweights.size();}}
public class Client {public static void main(String[] args) {WebsiteFactory f=new WebsiteFactory();Website f1=f.getWebsiteCategory("产品展示");f1.use("小明");Website f2=f.getWebsiteCategory("产品展示");f1.use("小李");Website f3=f.getWebsiteCategory("博客");f1.use("小网");System.out.println(f1==f2);System.out.println(f1==f3);System.out.println("功能的数目:"+f.getWebsiteCount());}}
程序的输出结果:
享元模式的应用:
当一个应用程序使用了大量的对象,而大量的对象造成了很大的存储开销时,就应该考虑使用享元模式。
享元模式是如此的重要,因为它能帮你在一个复杂的系统中大量的节省内存空间。在Java语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝。String a="abc",其中"abc"就是一个字符串常量。
熟悉java的应该知道下面这个例子:
输出结果是:OK。可以看出if条件比较的是两a和b的地址,也可以说是内存空间。
部分内容引自:http://blog.csdn.net/jason0539/article/details/22908915
http://www.cnblogs.com/java-my-life/archive/2012/04/26/2468499.html
程杰《大话设计模式》
- 常用设计模式-享元模式
- 设计模式---享元模式
- 设计模式 享元模式
- 设计模式 - 享元模式
- 设计模式:享元模式
- 设计模式 - 享元模式
- 设计模式-享元模式
- 设计模式---------享元模式
- 设计模式:享元模式
- 设计模式--享元模式
- 设计模式-享元模式
- 设计模式:享元模式
- 设计模式-享元模式
- 设计模式--享元模式
- 设计模式--享元模式
- 设计模式--享元模式
- 设计模式-享元模式
- 设计模式-享元模式
- vue mint-ui源码解析之loadmore组件
- 那些日常琐事(iPhone上的细小提示,大数据分析)
- struts2标签<s:select>的使用
- 生产环境的java项目如何更新
- css常用属性
- 常用设计模式-享元模式
- C++ Primer 10.4.2节练习10.30
- Codeforces 748 D Santa Claus and a Palindrome
- HTTP协议定义的八个标准方法(动作)
- arm芯片,远程空中升级程序技术方案
- 死锁
- 字母小游戏
- Alamofire封装
- Unity|ShaderLab笔记整理-二(逐顶点漫反射+环境光)