`

享元模式

阅读更多
通常情况下,我们会需要使用某个对象的时候会直接new,然后使用完后就等着垃圾回收器回收,但是如果访问量比较大new的对象比较多,那么很有可能会造成内存数据过大甚至是溢出的情况。享元模式最主要的目的就是解决减少大量创建新的对象,让多个对象引用公用缓存中的同一个对象。有点类始于连接池,当你需要的时候返回一个你所需的对象一样。
享元模式一共包含2个重要概念,一个是内蕴状态和外蕴状态。两种状态的充当者你可以根据自己的需要进行实现。
内蕴状态表示多个对象共享的部分。
外蕴状态表示每个对象独有的状态部分。
如现实中的聊天软件,你同时跟很多用户聊天,但不是你每次和某个用户的发送数据时都创建一个对象。而是多次公用一个对象,这就是使用了享元模式。
享元模式的组成元素:
享元接口:用于定义让具体享元实现的规范(定义方法)。
具体享元:实现享元接口。然后根据需要定义内蕴状态,可以是对象集合等等。就是共享的数据。然后定义一个外蕴状态。
定一个一个工厂方法,用户容纳各个具体享元元素,根据调用出需要返回合适的享元对象。
实例
抽象享元
public interface FlyWeight{
    //提供给具体享元元素一个操作的方法,该方法是接收外蕴状态的
     void operator();
    //这里定义一个显示内蕴和外蕴状态的方法
     void display();
}
定义具体享元元素A:
public class FlyWeightA implements FlyWeight{
    //定义内蕴状态这里定一个从数据库查询出的集合
     private List list;
    //定义一个外蕴状态,用于接收外部的状态然后执行外部的特殊需求
     private String outDesc;//可以根据自己的需求定义
   
     public FlyWeightA(){

    }
   
    void operate(String outDesc){
     this.outDesc = outDesc;
     //通过内蕴和外蕴实现所需要的逻辑
     sysout(outDesc);
  }

    void show(){
    //输出内蕴和外蕴状态
}

}

定义具体享元元素B:
public class FlyWeightB implements FlyWeight{
    //定义内蕴状态这里定一个从数据库查询出的集合
     private List list;
    //定义一个外蕴状态,用于接收外部的状态然后执行外部的特殊需求
     private String outDesc;//可以根据自己的需求定义
   
     public FlyWeightB(){

    }
   
    void operate(String outDesc){
     this.outDesc = outDesc;
     //通过内蕴和外蕴实现所需要的逻辑
     sysout(outDesc);
  }

    void show(){
    //输出内蕴和外蕴状态
}
}

定义工厂元素
public class FlyWeightFactory{
    private HashTable hash = new HashTable ();

    public FlyWeightFactory(){
        //分别生成A和B对象然后放入hash中
    }
   
    public FlyWeight get(String key){
     //根据不同的key返回所需要的FlyWeight
   }

}

//然后进行调用
main(){
   FlyWeightFactory factory = new FlyWeightFactory();
   //生产A
   FlyWeight aFlyWeight = factory.get("A");
   aFlyWeight.operator("a access");
  //生产b
  FlyWeight aFlyWeight = factory.get("b");
   aFlyWeight.operator("b access");
 
  //生产A
  FlyWeight aFlyWeight = factory.get("A");
   aFlyWeight.operator("A access");
   //实际上返回的还是第一个对象,只是可以外蕴不同罢了
}
分享到:
评论

相关推荐

    设计模式的享元模式的例子

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...

    软件设计模式——享元模式设计报告

    享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...

    享元模式,内含可运行代码和解释

    享元模式是一种经典的设计模式,属于结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在许多场景下,特别是计算机编程中,我们可能会遇到大量的相似对象,比如在图形...

    设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在处理大量对象时。在享元模式中,通过共享技术来有效支持大量细粒度的对象,从而减少内存消耗。《设计模式之禅》这本书是设计模式...

    享元模式代码示例

    享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低内存占用的目的。在面向对象编程中,当系统需要创建大量相似对象时,享元模式能够有效地提升性能,因为大部分对象是重复的,...

    享元模式Demo

    享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的情况。在计算机科学中,特别是编程领域,享元模式通过共享大量相似对象来减少内存占用,提高程序性能。它通过将对象的状态...

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

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

    总结JavaScript设计模式编程中的享元模式使用

    享元模式是软件工程中一种用于优化性能的设计模式,它通过共享相似对象的实例来减少内存使用或者计算的开销。在JavaScript编程中,尤其是处理DOM操作和大量相似对象时,享元模式的使用尤为关键。 享元模式的主要...

    Android享元模式Demo

    享元模式是一种优化资源利用、减少对象创建的设计模式,它在Android开发中也有着广泛的应用。在这个"Android享元模式Demo"中,我们将探讨如何在Android环境中实现享元模式,并通过具体的实例来理解其工作原理。 享...

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

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

    Java设计模式之享元模式

    享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...

    第15章_享元模式.ppt

    在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...

    享元模式代码+文档

    享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存占用的目的。在软件工程中,当一个系统需要处理大量相似对象时,享元模式能够有效地提升性能,尤其在处理轻量级对象时...

    享元模式flyweight

    享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...

    设计模式(C#)之享元模式(Flyweight Pattern)

    享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...

    享元模式的分析以及实际应用.docx

    享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理对象的数量,以达到节省内存的目的。在软件工程中,尤其是在处理大量相似对象时,享元模式能够显著提高系统的性能。享元模式通过共享那些可以共享的...

    C#面向对象设计模式纵横谈(12):Flyweight 享元模式(结构型模式) (Level 300)

    享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】

    java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...

    享元模式1

    享元模式 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的创建,降低系统资源的开销和内存压力。该模式通过共享已经存在的对象来大幅减少需要创建的对象数量,避免创建大量相似类带来...

Global site tag (gtag.js) - Google Analytics