java性能优化读书笔记之二《设计优化===享元模式》
来源:互联网 发布:c int数组默认值 编辑:程序博客网 时间:2024/05/18 03:53
1. 目的
减少相同对象实例化次数,从而省略创建对象所花费的时间以及内存空间,降低GC回收的压力。
2. 什么是享元
一个系统中存在多个相同的对象,那么只需要共享一份对象的拷贝,而不必为每一次使用都创建新的对象
3. 解决什么问题
相同的对象频繁地创建与销毁
4. 如何解决
享元工厂会维护一个对象列表,当任何组件尝试获取享元类时,如果请求的享元类已经存在,则直接fanh已有的享元类。若没有,则创建一个新的享元类
5. 何时使用
当您想控制相同对象的实例数目,节省系统资源的时候。
6. 好处
1、可以节省重复创建对象的开销
2、减少创建对象的数量,对系统内存的需求也减少了
7. 坏处
1、享元模式使得系统更加复杂。为了使对象可以共享,需要将一些状态外部化,这使得程序的逻辑复杂化。
2、享元模式将享元对象的状态外部化,而读取外部状态使得运行时间稍微变长。
8. 角色分配
8. 代码清单
package com.one.design;import java.util.HashMap;import java.util.Map;/** * 模拟银行账户查询的功能 * 场景描述:银行账户去ATW账户查询余额,如果是同一个多次查询余额,账户对象(IAccountImpl) * 只需要实例化一次,当然,这种场景只是熟悉享元模式的用法 * @author Administrator * *//public class Flyweight {} /** * 抽象享元 * @author Administrator * */ interface IAccount { void queryBalance();} /** * 抽象实现类 * @author Administrator * */ class IAccountImpl implements IAccount { private String name; IAccountImpl(String name) { this.name = name; } public void queryBalance() { if("张三".equals(name)) { System.out.println("acount be {}:"+name+",balance{}:100"); return; } else if("李四".equals(name)){ System.out.println("acount be {}:"+name+",balance{}:200"); return; } System.out.println("acount is not exist!"); }} /** * 享元对象维护工厂 * @author Administrator * */ class Accountfactory{ private Map<String, IAccountImpl> accountMap = new HashMap<String, IAccountImpl>(); public IAccountImpl getAccountImpl(String name) { IAccountImpl iAccountImpl = accountMap.get(name); if(iAccountImpl == null) { iAccountImpl = new IAccountImpl(name); accountMap.put(name, iAccountImpl); return iAccountImpl ; } return iAccountImpl; } /** * 测试类 * @param args */ public static void main(String[] args) { Accountfactory accountfactory = new Accountfactory(); IAccountImpl accountImpl2 = accountfactory.getAccountImpl("张三"); IAccountImpl accountImpl3 = accountfactory.getAccountImpl("张三"); accountImpl2.queryBalance(); accountImpl3.queryBalance(); System.out.println((accountImpl2 == accountImpl3) ); IAccountImpl accountImpl4 = accountfactory.getAccountImpl("李四"); IAccountImpl accountImpl5 = accountfactory.getAccountImpl("李四"); accountImpl4.queryBalance(); accountImpl5.queryBalance(); System.out.println((accountImpl4 == accountImpl5) ); } }
0 0
- java性能优化读书笔记之二《设计优化===享元模式》
- java性能优化读书笔记之二《设计优化===单例模式》
- java性能优化读书笔记之二《设计优化===代理模式》
- java性能优化读书笔记之二《设计优化===装饰者模式》
- Java程序性能优化 读书笔记(四)设计模式:享元模式
- java性能优化读书笔记之三《程序优化===字符串优化》
- java性能优化读书笔记之三《程序优化===集合优化(list)》
- java性能优化读书笔记之三《程序优化===集合优化(Map)》
- java性能优化读书笔记之三《程序优化===优化集合访问代码》
- Java程序性能优化 读书笔记(二)设计模式:单例模式
- JAVA性能优化之设计模式
- Java性能优化之设计模式-单例模式
- java 性能优化读书笔记
- 《Java性能优化...》读书笔记
- java程序性能优化之设计优化--设计模式:单例模式(1)
- 读书笔记之Java程序性能优化
- Java程序性能优化 读书笔记(三)设计模式:代理模式
- Java程序性能优化 读书笔记(五)设计模式:装饰者模式
- Fragment详解之三——管理Fragment(1)
- eclipse Maven配置struts2详解——总结网上教程
- GoLang环境搭建
- 批量改一个文件夹下的文件格式,可以很好的防止病毒入侵,懂原理,有源码
- android 控件显示和隐藏时增加动画效果
- java性能优化读书笔记之二《设计优化===享元模式》
- 创建Tomcat web时出现错误提示:unbound classpath variable
- 地理空间数据下载 积累
- java.lang.UnsatisfiedLinkError: Couldn't load easemob_jni from loader dalvik.system.PathClassLoader
- PFX文件提取公钥私钥
- android wear-Drawing Watch Faces
- 2016.1.16 git学习 .gitignore格式规范
- Fragment详解之四——管理Fragment(2)
- mongodb学习系列之一