`

设计模式--------享元模式

阅读更多
Flyweight 是拳击比赛中的特用名词,意思是“特轻量级”,指的是51 公斤级比赛,用到设计模式中是指我们的类要轻量级,粒度要小这才是它要表到的意思,粒度小了,带来的问题就是对象太多,那就是用共享技术来解决。

场景:
在报考系统中,我们需要填写信息:
public class SignInfo {
   //报名人员的ID
   private String id;
   //考试地点
   private String location;
   //考试科目
   private String subject;
   //邮寄地址
   private String postAddress;
   。。。。。。
}

上面是填写信息的 java Bean

但是问题来了:  如果一万个人注册,那么就会有一万个SignInfo同时在内存中产生,那么内存就爆了。。。所以我们不能让他产生这么多对象。。。。怎么办。。。

方法只有一个,就是排队请求呗,因为一万个人同时注册,而我又不能产生一万个SignInfo,那么当然在同一时刻不可能一万个人都在搞。。所以只能让部分的人等待

所以我们规定同一地区同一考试科目的SignInfo必须排队来取。。。。那么我们就让同一地区同一考试科目的SignInfo只能产生一个,而且他要处理一队人,放入线程池哈

public class SignInfo4Pool extends SignInfo {
    //定义一个对象池提取的KEY值
    private String key;
    //构造函数获得相同标志
    public SignInfo4Pool(String _key){
        this.key = _key;
   }
  。。。。。。
}

public class SignInfoFactory {
  //池容器
    private static HashMap<String,SignInfo> pool = new
   HashMap<String,SignInfo>();
  
   //从池中获得对象
    public static SignInfo getSignInfo(String key){
    //设置返回对象
    SignInfo result = null;
    //池中没有该对象,则建立,并放入池中
    if(!pool.containsKey(key)){
        System.out.println(key + "----建立对象,并放置到池中");
        result = new SignInfo4Pool(key);
        pool.put(key, result);
    }else{
        result = pool.get(key);
        System.out.println(key +"---直接从直池中取得");
    }
    return result;
}

那么我们拿对象是这么拿的。。。
SignInfo signInfo = SignInfoFactory.getSignInfo("科目1考试地点1");


注意:因为共享,所以带来性能问题。。。其实我可以这么解决

先拿出来这个sinInfo,然后在用他的时候直接用对象锁啊。。。
synchronized(signInfo.this){
   ....... //这样不就搞定了呀
}


分享到:
评论

相关推荐

    JAVA-设计模式-结构型模式-享元模式

    JAVA-设计模式-结构型模式-享元模式

    设计模式--享元模式

    设计模式--享元模式

    java常用设计模式-享元模式

    java常用设计模式-享元模式

    c++设计模式-结构型模式-享元模式

    c++设计模式-结构型模式-享元模式;qt工程;c++简单源码; 享元(Flyweight)模式的定义:运用共享技术来有效地支持大量细粒度对象的复用。它通过共享已经存在的对象来大幅度减少需要创建的对象数量、避免大量相似类...

    6.设计模式-享元模式1

    设计模式-享元模式 设计模式是软件设计中的一种解决方案,旨在提高代码的可维护性、灵活性和可重用性。享元模式(Flyweight Pattern)是结构型模式的一种,主要用于减少大量相似对象的内存占用,提高系统的性能和...

    设计模式-享元模式(讲解及其实现代码)

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...

    设计模式-Java语言中的应用

    设计模式通常分为三类:创建型模式(如工厂模式、抽象工厂模式、单例模式、建造者模式、原型模式),结构型模式(如适配器模式、装饰器模式、代理模式、桥接模式、组合模式、外观模式、享元模式)以及行为型模式(如...

    java设计模式---诙谐易懂版

    根据给定文件内容,以下是关于Java设计模式的知识点说明: 1. 策略模式(Strategy Pattern)是一种行为设计模式,允许在运行时选择算法的行为。策略模式的意图是定义一系列算法,将每个算法封装起来,并使它们可以...

    设计模式精解-GoF-23种设计模式解析--附C++源代码

    - 享元模式(Flyweight):使用共享对象,有效地支持大量细粒度的对象。 3. **行为型模式**:这类模式关注对象之间的责任分配。 - 责任链模式(Chain of Responsibility):避免将请求的发送者和接收者耦合在一起...

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    设计模式----命令模式

    享元模式则是一种结构型设计模式,它能通过共享技术有效地支持大量细粒度的对象。当系统中存在大量相似对象时,享元模式可以极大地减少内存的占用。享元模式通常与Flyweight接口、Concrete Flyweight(具体享元)、...

    设计模式专题之(十二)享元模式---设计模式享元模式示例代码(python--c++)

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到提高系统性能的目的。在大型软件系统中,特别是在处理大量相似对象时,享元模式能够有效地减少内存开销,提高系统运行效率。在这...

    【Java设计模式-源码】享元模式

    Java中的享元设计模式对于优化内存使用和提高应用程序性能至关重要。通过最小化创建的对象数量,它显著减少了内存占用。享元模式的主要目标是在相似对象之间尽可能多地共享数据,从而提高效率和性能。 ## 二、详细...

    软件设计模式--填空题+简答题(复习7).rar

    2. **设计模式分类**:设计模式通常分为三类:创建型模式(如工厂方法、抽象工厂、单例、建造者、原型)、结构型模式(如适配器、桥接、装饰、组合、代理、外观、享元)和行为型模式(如责任链、命令、解释器、迭代...

    享元模式 - Java 设计模式 - 示例代码

    享元模式的标准定义代码,以及一个五子棋的示例代码。

    设计模式课件大全

    设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者...

    JAVA设计模式-chm版

    这个“JAVA设计模式-chm版”资源显然包含了关于Java设计模式的详细信息,便于理解和应用。设计模式是对常见问题的解决方案的标准化描述,它们在软件工程中起到了重要的作用,帮助开发者创建可维护、可扩展且易于理解...

    设计模式学习笔记--Flyweight享元模式.docx

    享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...

    设计模式-C++

    结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、...

    《C++20设计模式》学习笔记-第11章享元模式-配套代码

    《C++20设计模式》学习笔记-第11章享元模式-配套代码

Global site tag (gtag.js) - Google Analytics