`
he_wen
  • 浏览: 239394 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

JAVA API String小细节之享元模式

    博客分类:
  • Java
阅读更多

GOF:运用共享技术有效地支持大量细粒度的对象。
解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。比如说(这里引用GOF书中的例子)一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大节约了资源。

  在Flyweight模式中,由于要产生各种各样的对象,所以在Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对象存储池(Flyweight Pool)来存放内部状态的对象。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多,下面举个例子:
这个列子也是JavaAPI String运用了String池来创建字符串对象

        这是一个抽象的字符串操作方法

package com.hewen.flyweight;

public abstract class FlyWeight {
	public abstract void operation();
}

具体的操作方法

package com.hewen.flyweight;

public class ConcreteFlyweight extends FlyWeight {

	private String string;
	ConcreteFlyweight(String string){
		this.string=string;
	}
	@Override
	public void operation() {
		System.out.println("Concrete---Flyweight : " + string);

	}

}

 一个维护String对象的工厂

package com.hewen.flyweight;

import java.util.Hashtable;

public class FlyWeightFactory {
private Hashtable flyweights=new Hashtable();
public FlyWeight getFlyWeight(Object obj){
	FlyWeight flyweight=(FlyWeight) flyweights.get(obj);
	if(flyweight==null){
		flyweight=new ConcreteFlyweight((String)obj);
		flyweights.put(obj,flyweight);
	}
	return flyweight;
}
public int getFlyweightSize(){
	return flyweights.size();
}
}

在1处定义了一个Hashtable用来存储各个对象;在2处选出要实例化的对象,在6处将该对象返回,如果在Hashtable中没有要选择的对象,此时变量flyweight为null,产生一个新的flyweight存储在Hashtable中,并将该对象返回。 

还有相当于word中的英文组成,只需要26个对象

0
0
分享到:
评论

相关推荐

    java API使用-中文word

    ### Java API 使用详解 #### 一、Java 面向对象基本概念 Java是一种完全的面向对象编程语言,除了原始数据类型(如int、double等),几乎所有事物都被视为对象。对象是类的实例,拥有状态(属性)和行为(方法)。...

    java 的研磨设计模式(模式)

    Java中String对象池就是享元模式的应用。 9. 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。Java集合框架中的Composite接口就是组合模式的体现。 ...

    java API实例

    Java API实例是学习和理解Java编程语言核心功能的重要资源,尤其对初学者而言,它提供了大量现成的代码示例,帮助快速上手并熟练掌握Java API的使用。API(Application Programming Interface)是一组预定义的函数、...

    JAVA1.9 CN中文 API文档

    Stream API在Java 9中得到了进一步增强,新增了`ofNullable()`方法用于处理可能为null的值,以及`parallel()、sequential()`用于切换流的执行模式。 6. **进程API的改进** `java.lang.Process`和相关类进行了改进...

    (超赞)JAVA精华之--深入JAVA API

    ### 深入Java API #### 一、Java SE **1.1 深入 Java API** **1.1.1 Lang包** - **String类与 StringBuffer类** - `String` 类不可变,一旦创建后其内容无法更改;而 `StringBuffer` 类则允许在原有基础上修改...

    ZooKeeper Java API

    通过阅读ZooKeeper的Java API源码,我们可以深入了解其实现原理,例如Watch事件的触发机制、网络通信的细节、以及数据一致性保证的方法等。对于深入理解ZooKeeper的工作方式和优化分布式应用程序非常有帮助。 **7. ...

    Java-bluetooth-API.rar_bluetooth api_java bluetooth a_java bluet

    总的来说,Java蓝牙API提供了一套完整的框架,使得开发者无需深入了解蓝牙协议细节,就能够开发出跨平台的蓝牙应用。通过熟练掌握这些API,开发者可以实现设备的发现、连接,以及高效的数据传输,从而扩展Java应用...

    java工厂模式-简单工厂模式

    简单工厂模式并不是GoF设计模式之一,但它作为设计模式的基础,在实际项目中被广泛使用。简单工厂模式的主要目的是将对象的创建与对象的使用分离,使代码更加灵活,易于扩展和维护。本文将详细介绍简单工厂模式的...

    java设计模式学习笔记

    ### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...

    关于 Java Collections API 您不知道的 5 件事,第 1 部分

    与之相对的是,Java 的 Collections API 提供了一套更加丰富、灵活且高效的解决方案。例如,在将数组的内容转换为字符串时,使用传统的数组需要显式地迭代每个元素并连接起来,而 Collections 的实现通常已经内置了 ...

    java写文件固定大小为2G

    总结来说,Java文件读写提供了丰富的API来处理各种文件操作。在处理大文件或需要限制文件大小的场景时,理解如何跟踪已写入的数据、适时关闭和创建新文件至关重要。这个过程涉及到文件流的管理和异常处理,确保数据...

    Java Date与String的相互转换详解

    总之,Java中`Date`和`String`的转换主要依赖于`SimpleDateFormat`,通过定义不同的模式,可以灵活地将日期转换为各种格式的字符串,或者将符合特定格式的字符串解析为日期。在实际开发中,确保模式与字符串匹配是...

    java发布订阅模型demo

    Java的发布订阅(Publish-Subscribe)模型是一种设计模式,它基于“观察者”模式,用于在对象之间建立一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在...

    JAVA开发技术JDBC API

    JAVA开发中的JDBC(Java Database Connectivity)API是用于在Java应用程序和各种数据库之间建立连接的一组接口和类。它提供了一种标准化的方式来访问多种不同类型的数据库,使得开发者无需关心具体的数据库实现细节...

    Java 本地接口规范

    ### Java本地接口规范(JNI)详解 #### 一、Java本地接口的历史与演变 ##### JDK1.0的时代 ...通过深入理解JNI的工作原理和API细节,开发者可以构建出更加高效、稳定且具有高度互操作性的Java应用程序。

    外观模式 - 代码(Java)

    在Java中,外观模式的应用可以帮助我们更好地组织代码,降低系统的耦合度,并提高代码的可读性和易用性。 ### 外观模式的核心概念 1. **外观(Facade)角色**:这是对外系统或子系统的主要接口,客户端通过这个...

    JDK+API中文版.rar

    2. **字符串处理**:String类是Java中最常用的类之一,提供了大量的方法用于字符串的创建、比较、查找、替换等操作。 3. **集合框架**:Java集合框架是API中的重要部分,包括List、Set、Map等接口,以及ArrayList、...

    jdk api 1.8.rar

    以上只是Java API 1.8中的一部分重要特性,实际的API文档包含了更多细节和实例,帮助开发者深入理解和使用这些特性,提升开发效率和代码质量。对于Java开发者来说,熟悉并掌握Java 8 API是提升技能的必要步骤。

    JDK1.8 中文API手册

    以上只是JDK1.8中部分重要特性,实际手册中包含了Java SE平台的全部API细节,包括类库、网络编程、I/O流、异常处理、反射、注解、泛型等多个方面。开发者通过深入学习和理解这些API,能够更好地掌握Java编程,提升...

Global site tag (gtag.js) - Google Analytics