- 浏览: 60948 次
- 性别:
- 来自: 青岛
文章分类
- 全部博客 (69)
- TWaver (1)
- jBPM (0)
- Struts2.0 (0)
- Hibernate (1)
- Spring (3)
- Swing (4)
- JPA (0)
- EJB (1)
- Birt (0)
- jxl (0)
- Seam (0)
- JSF (1)
- JSP (0)
- Servlet (0)
- JS (0)
- JBoss (0)
- SWT (3)
- Lucene (0)
- 设计模式 (22)
- 其他 (2)
- java (12)
- socket (1)
- android (1)
- ibatis (1)
- sqlite (1)
- junit (1)
- oracle (9)
- poi (1)
- php (1)
- bigbluebutton (1)
最新评论
-
u013246812:
访问不了啊,链接不存在!要么给个源码也行啊!
地方性网站 城阳部落 -
yhman:
原地复活。。。
php+mysql -
wo327808864:
...
socket传输自定义对象 -
锅巴49:
说得好,理解了。
状态模式 -
yhman:
哈哈。。。。
java的文件锁
flyweight模式的出现是因为面向对象开发有时在设计和性能方面存在相悖的情况,当内存因为对象过多而产生泄露导致宕机,而这又是由于业务本身需求的时候,我们就不得不采用以时间换空间的策略了.
这里便引入了亨元模式.
我理解的亨元模式是抽取对象中共有的属性作为元,产生对象并放在池中(显然此时创建的对象要少的多),然后在用到的时候直接从池中取得.
但这样做很显然会涉及到同步的问题,此时有N个用户需要该对象,但此时又加了锁,那只能进入等待队列中.该怎么样解决,因为我实际并没有在专案中用到过该模式,所以也不甚明白,总之感觉就算效率低下也总比宕机要好的多.
亦有有经验人在解决同步时称:在使用享元模式时,对象池中的享元对象尽量的多,多到足够满足业务为止。
此为经验之谈,以后遇到应该注意.
代码是取自别人:
需要注意的是外蕴一般要用java的基本类型如int,String等,像以上用自己定义的object来做外酝的话,效率相较低下.
这里便引入了亨元模式.
我理解的亨元模式是抽取对象中共有的属性作为元,产生对象并放在池中(显然此时创建的对象要少的多),然后在用到的时候直接从池中取得.
但这样做很显然会涉及到同步的问题,此时有N个用户需要该对象,但此时又加了锁,那只能进入等待队列中.该怎么样解决,因为我实际并没有在专案中用到过该模式,所以也不甚明白,总之感觉就算效率低下也总比宕机要好的多.
亦有有经验人在解决同步时称:在使用享元模式时,对象池中的享元对象尽量的多,多到足够满足业务为止。
此为经验之谈,以后遇到应该注意.
代码是取自别人:
package pattern.flyweight; public class SignInfo { // 报名人员的ID private String id; // 考试地点 private String location; // 考试科目 private String subject; // 邮寄地址 private String postAddress; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getPostAddress() { return postAddress; } public void setPostAddress(String postAddress) { this.postAddress = postAddress; } }
package pattern.flyweight; import java.util.HashMap; public class SignInfoFactory { // 报名信息的对象工厂 private static HashMap<ExtrinsicState, SignInfo> pool = new HashMap<ExtrinsicState, SignInfo>(); // 报名信息的对象工厂 public static SignInfo getSignInfo() { return new SignInfo(); } // 从池中获得对象 public static SignInfo getSignInfo(ExtrinsicState key) { // 设置返回对象 SignInfo result = null; // 池中没有该对象,则建立,并放入池中 if (!pool.containsKey(key)) { System.out.println(key + "----建立对象,并放置到池中"); result = new SignInfo(); pool.put(key, result); } else { result = pool.get(key); System.out.println(key + "---直接从直池中取得"); } return result; } }
package pattern.flyweight; public class ExtrinsicState { // 考试科目 private String subject; // 考试地点 private String location; public String getSubject() { return subject; } public void setSubject(String subject) { this.subject = subject; } public String getLocation() { return location; } public void setLocation(String location) { this.location = location; } @Override public boolean equals(Object obj) { if (obj instanceof ExtrinsicState) { ExtrinsicState state = (ExtrinsicState) obj; return state.getLocation().equals(location) && state.getSubject().equals(subject); } return false; } @Override public int hashCode() { return subject.hashCode() + location.hashCode(); } }
package pattern.flyweight; public class Client { public static void main(String[] args) { ExtrinsicState state1 = new ExtrinsicState(); state1.setSubject("科目1"); state1.setLocation("上海"); SignInfoFactory.getSignInfo(state1); ExtrinsicState state2 = new ExtrinsicState(); state2.setSubject("科目1"); state2.setLocation("上海"); // 初始化对象池 SignInfoFactory.getSignInfo(state1); // 计算执行10万次需要的时间 long currentTime = System.currentTimeMillis(); for (int i = 0; i < 100000; i++) { SignInfoFactory.getSignInfo(state2); } long tailTime = System.currentTimeMillis(); System.out.println("执行时间:" + (tailTime - currentTime) + " ms"); } }
需要注意的是外蕴一般要用java的基本类型如int,String等,像以上用自己定义的object来做外酝的话,效率相较低下.
发表评论
-
备忘录模式
2010-05-14 11:49 794memento是一个保存另外一个对象内部状态拷贝的对象.这样以 ... -
解释器模式
2010-05-14 11:33 850Interpreter,解释器模式描述了如何构成一个简单的语言 ... -
中介者模式
2010-05-14 11:07 735Mediator Pattern 用一个调停对象来封装一系列的 ... -
原型模式
2010-05-13 19:24 722原型模式(Prototype): 用原型实例指定创建对象的种类 ... -
状态模式
2010-05-13 17:20 812State的定义: 不同的状态,不同的行为;或者说,每个状态有 ... -
访问者模式
2010-05-13 15:15 586表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
责任链模式
2010-05-13 13:50 694Chain of Responsibility(CoR) ... -
观察者模式
2010-05-13 01:22 728观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听 ... -
组合模式
2010-05-12 22:58 618组合模式(Composite Pattern)有时候又叫做部分 ... -
迭代器模式
2010-05-12 19:41 713提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对 ... -
装饰模式
2010-05-12 19:29 612Decorator pattern 装饰模式是用于对象的创建, ... -
命令模式
2010-05-12 18:02 647命令模式: 将请求封闭成对象,这可以让你使用不同的请求,队列. ... -
桥梁模式
2010-05-12 01:01 389桥梁(Bridge)模式 桥梁模式是一个非常有用的模式,也 ... -
建造者模式
2010-05-11 23:27 656Builder模式也叫建造者模式或者生成器模式,是由GoF提出 ... -
模板模式
2010-05-11 22:19 667模板方法(Template Method)模式属于行为模式,定 ... -
适配器模式
2010-05-11 16:58 579将一个类的接口转换成客户希望的另外一个接口。Adapter模式 ... -
门面模式
2010-05-11 14:39 1252Facade外观模式: 为子系统中的一组接口提供一个统一接口 ... -
工厂模式
2010-05-11 10:55 654通常来讲,工厂模式分为:简单工厂模式,工厂方法模式和抽象工厂模 ... -
单例模式
2010-05-10 23:53 672主类: public class TheKing { p ... -
代理模式
2010-05-10 18:22 761定义 代理模式( ...
相关推荐
这样可能会出现内存使用越来越多的情况,这样的问题是非常严重,然而享元模式可以解决这个问题 1. 享元模式的实现精髓: “既然都是同一个对象,能不能只创建一个对象,然后下次需要创建这个对象的时候,让它直接用...
1、策略模式STRATEGY PATTERN 2、代理模式PROXY PATTERN 3、单例模式SINGLETON PATTERN 4、多例模式MULTITION PATTERN 5、工厂方法模式FACTORY METHOD PATTERN 6、抽象工厂模式ABSTRACT ...23、亨元模式 24、备忘录模式
亨元模式使用共享对象可有效地支持大量的细粒度的对象。 24. 备忘录模式(Memento Pattern) 备忘录模式在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到...
亨元模式运用共享技术有效地支持大量细粒度的对象。 #### 二十五、备忘录模式(Memento Pattern) 备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该...
16. 亨元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。 17. 享元模式(享元模式在文档中出现了两次,这里默认为漏识别,实际上享元模式是设计模式中的一种)。 18. 备忘录模式(Memento ...
- 亨元模式(FlyweightPattern):运用共享技术有效地支持大量细粒度的对象。 - 备忘录模式(MementoPattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将...
23. 亨元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。 24. 备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将...
23. 亨元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度的对象。 除了上述23种设计模式外,书中还讲解了六大设计原则,它们是面向对象设计的基本原则,可用来提高代码的可复用性、灵活性和可维护性...
23. 亨元模式【FlyweightPattern】:运用共享技术有效地支持大量细粒度的对象。 24. 备忘录模式【MementoPattern】:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该...
6. 亨元模式:通过共享技术,有效地支持大量细粒度对象。 7. 代理模式:为其他对象提供一个代理以控制对该对象的访问。 行为型模式涉及对象之间的交互和职责分配,例如: 1. 命令模式:将请求封装为一个对象,以便...