打字猴:1.70047498e+09
1700474980 设计模式之禅 [:1700454055]
1700474981 设计模式之禅 28.3 享元模式的应用
1700474982
1700474983 28.3.1 享元模式的优点和缺点
1700474984
1700474985 享元模式是一个非常简单的模式,它可以大大减少应用程序创建的对象,降低程序内存的占用,增强程序的性能,但它同时也提高了系统复杂性,需要分离出外部状态和内部状态,而且外部状态具有固化特性,不应该随内部状态改变而改变,否则导致系统的逻辑混乱。
1700474986
1700474987
1700474988
1700474989
1700474990 设计模式之禅 28.3.2 享元模式的使用场景
1700474991
1700474992 在如下场景中则可以选择使用享元模式。
1700474993
1700474994 ❑系统中存在大量的相似对象。
1700474995
1700474996 ❑细粒度的对象都具备较接近的外部状态,而且内部状态与环境无关,也就是说对象没有特定身份。
1700474997
1700474998 ❑需要缓冲池的场景。
1700474999
1700475000
1700475001
1700475002
1700475003 设计模式之禅 [:1700454056]
1700475004 设计模式之禅 28.4 享元模式的扩展
1700475005
1700475006 28.4.1 线程安全的问题
1700475007
1700475008 线程安全是一个老生常谈的话题,只要使用Java开发都会遇到这个问题,我们之所以要在今天的享元模式中提到该问题,是因为该模式有太大的几率发生线程不安全,为什么呢?
1700475009
1700475010 我们还以报考系统为例来说明这个问题。大家有没有想过,为什么要以考试科目+考试地点作为外部状态呢?为什么不能以考试科目或者考试地点作为外部状态呢?这样池中的对象会更少!可以!完全可以!我们把程序以考试科目为外部状态,把享元工厂稍作修改,如代码清单28-10所示。
1700475011
1700475012 代码清单28-10 报考信息工厂
1700475013
1700475014 public class SignInfoFactory{
1700475015
1700475016 //池容器
1700475017
1700475018 private static HashMap<String,SignInfo>pool=new HashMap<String,SignInfo>();
1700475019
1700475020 //从池中获得对象
1700475021
1700475022 public static SignInfo getSignInfo(String key){
1700475023
1700475024 //设置返回对象
1700475025
1700475026 SignInfo result=null;
1700475027
1700475028 //池中没有该对象,则建立,并放入池中
1700475029
[ 上一页 ]  [ :1.70047498e+09 ]  [ 下一页 ]