- 浏览: 216738 次
- 性别:
- 来自: 北京
文章分类
通常情况下,我们会需要使用某个对象的时候会直接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");
//实际上返回的还是第一个对象,只是可以外蕴不同罢了
}
享元模式一共包含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");
//实际上返回的还是第一个对象,只是可以外蕴不同罢了
}
发表评论
-
多种单例模式的分析
2012-03-28 18:06 0blog.csdn.net/derpvailzhangfan/ ... -
JDK中的设计模式
2012-03-14 22:56 01.Abstract Factory •java.util.C ... -
简单工厂模式使用心得(使用场景)
2012-02-23 18:24 11531在实际项目中,简单工厂模式是我们使用的最多的设计模式之一,简单 ... -
AbstractList中Iterator模式的妙用
2012-01-13 11:51 979AbstractList中为了实现顺序访问AbstractLi ... -
适合使用命令模式的情景
2012-01-13 11:31 919情景1.当借个类都拥有 ... -
Iterator模式
2012-01-13 10:57 897我个人常叫它游标模式,该模式的主要目的就是,顺序访问集合中的各 ... -
使用工厂设计模式的场景
2012-01-12 15:43 2796创建类对象虽然可以使用new(底层也是通过反射创建对象的),但 ... -
JDK中使用的设计模式
2012-01-13 10:04 14431.抽象工厂模式 实 ... -
JDK中使用的设计模式代码实例
2012-01-05 17:38 0http://stackoverflow.com/questi ... -
策略模式
2011-12-22 17:07 892所谓策略模式就是定义了多种算法,而让不同算法之间的切换不会影响 ... -
合成设计模式
2011-12-22 16:28 992如果要将对象组织到树中,使用树来表示对象之间的关系,请考虑使用 ... -
责任链模式
2011-12-20 18:35 844此文转正于http://wenku.baidu.com/vie ... -
桥梁设计模式
2011-12-19 18:19 845如果有很多对象要处理,而又有很多操作要做。这时可以考虑使用桥梁 ... -
多线程设计模式(Thread-Specific storage)
2011-12-12 15:29 5857引用自http://www.riabook.cn/doc/de ... -
代理模式
2011-11-30 15:26 940代理模式实际上是对对象的一种代理,以控制对象的访问。 有些情况 ... -
观察者模式
2011-11-16 14:48 1426声明转载的,简单易懂,呵呵 观察者模式的构造 l 抽 ... -
命令模式
2011-11-16 14:11 1258今天想学学命令模式,看见了一个文章讲的就是命令模式,感觉实例比 ... -
建造模式
2011-11-14 12:03 927建造模式是将负责对象 ... -
设计模式之适配器模式
2011-11-09 18:24 973适配器模式:主要是为了解决,老的对象在新的环境中不兼容的现象。 ... -
设计模式之模版方法
2011-11-09 16:31 825模版方法是一种非常简单的设计模式:简单的理解就是将关键的业务方 ...
相关推荐
享元模式是软件设计模式中的一种结构型模式,它的主要目的是通过共享大量细粒度对象来减少内存的使用,提高系统性能。在许多场景下,尤其是处理大量相似对象时,享元模式能显著减少内存开销。这个压缩包文件...
享元模式是一种软件设计模式,它的主要目的是为了提高性能,减少对象的创建,尤其是在大量相似对象需要被创建的情况下。在给定的咖啡店案例中,享元模式的应用可以帮助优化内存使用,避免为每杯咖啡的配料表分配独立...
享元模式是一种经典的设计模式,属于结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在许多场景下,特别是计算机编程中,我们可能会遇到大量的相似对象,比如在图形...
享元模式是软件设计模式中的一种结构型模式,它的主要目的是为了提高性能,尤其是在处理大量对象时。在享元模式中,通过共享技术来有效支持大量细粒度的对象,从而减少内存消耗。《设计模式之禅》这本书是设计模式...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低内存占用的目的。在面向对象编程中,当系统需要创建大量相似对象时,享元模式能够有效地提升性能,因为大部分对象是重复的,...
享元模式是一种优化资源使用的软件设计模式,尤其适用于对象创建成本较高或系统内存有限的情况。在计算机科学中,特别是编程领域,享元模式通过共享大量相似对象来减少内存占用,提高程序性能。它通过将对象的状态...
享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...
享元模式是软件工程中一种用于优化性能的设计模式,它通过共享相似对象的实例来减少内存使用或者计算的开销。在JavaScript编程中,尤其是处理DOM操作和大量相似对象时,享元模式的使用尤为关键。 享元模式的主要...
享元模式是一种优化资源利用、减少对象创建的设计模式,它在Android开发中也有着广泛的应用。在这个"Android享元模式Demo"中,我们将探讨如何在Android环境中实现享元模式,并通过具体的实例来理解其工作原理。 享...
享元模式是一种结构型设计模式,它通过共享已有对象来减少内存中对象的数量,从而达到降低系统内存占用、提高性能的目的。在软件工程中,当系统中存在大量相似或重复的对象时,享元模式尤为适用。 享元模式的核心是...
享元模式是软件设计模式中的一种结构型模式,它的核心思想是通过共享已经存在的对象来减少内存中的对象数量,从而提高系统性能。在Java中,享元模式常用于处理大量相似对象的场景,例如在图形界面中绘制大量相似的...
在享元模式中可以共享的相同内容称为内部状态(Intrinsic State),而那些需要外部环境来设置的不能共享的内容称为外部状态(Extrinsic State),由于区分了内部状态和外部状态,因此可以通过设置不同的外部状态使得相同...
享元模式是一种结构型设计模式,它通过共享已有对象来减少系统中对象的数量,从而达到降低内存占用的目的。在软件工程中,当一个系统需要处理大量相似对象时,享元模式能够有效地提升性能,尤其在处理轻量级对象时...
享元模式(Flyweight Pattern)是一种结构型设计模式,它能有效地减少系统中对象的数量,从而降低内存消耗,提高性能。这种模式通过共享大量相似对象的内部状态来达到这一目标,而只保留对象的外部状态在外部管理。...
享元模式是设计模式中的一种结构型模式,它主要通过共享已有对象来减少内存中对象的数量,从而提高系统性能。在C#编程中,享元模式尤其适用于那些创建大量相似对象且内存消耗较大的场景。本篇文章将深入探讨享元模式...
享元模式是一种优化资源利用的设计模式,主要用于减少创建和管理对象的数量,以达到节省内存的目的。在软件工程中,尤其是在处理大量相似对象时,享元模式能够显著提高系统的性能。享元模式通过共享那些可以共享的...
享元模式是面向对象设计中的一种结构型模式,它的主要目的是通过共享大量相似对象来减少内存的使用,提高系统的性能。在C#编程语言中,我们可以利用享元模式来优化那些具有大量实例但大部分状态可以共享的对象。在这...
java设计模式【之】享元模式【源码】【场景:多缓存可选模式】 /** * 享元模式(预加载单例) * “元” 理解为 “同一地址对象” * 运用共享技术,减少对象的创建,降低对象的数量,降低内存消耗,提高性能 * ...
享元模式 享元模式(Flyweight Pattern)是一种结构型设计模式,旨在减少大量相似对象的创建,降低系统资源的开销和内存压力。该模式通过共享已经存在的对象来大幅减少需要创建的对象数量,避免创建大量相似类带来...