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个对象
分享到:
相关推荐
### Java API 使用详解 #### 一、Java 面向对象基本概念 Java是一种完全的面向对象编程语言,除了原始数据类型(如int、double等),几乎所有事物都被视为对象。对象是类的实例,拥有状态(属性)和行为(方法)。...
Java中String对象池就是享元模式的应用。 9. 组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。Java集合框架中的Composite接口就是组合模式的体现。 ...
Java API实例是学习和理解Java编程语言核心功能的重要资源,尤其对初学者而言,它提供了大量现成的代码示例,帮助快速上手并熟练掌握Java API的使用。API(Application Programming Interface)是一组预定义的函数、...
Stream API在Java 9中得到了进一步增强,新增了`ofNullable()`方法用于处理可能为null的值,以及`parallel()、sequential()`用于切换流的执行模式。 6. **进程API的改进** `java.lang.Process`和相关类进行了改进...
### 深入Java API #### 一、Java SE **1.1 深入 Java API** **1.1.1 Lang包** - **String类与 StringBuffer类** - `String` 类不可变,一旦创建后其内容无法更改;而 `StringBuffer` 类则允许在原有基础上修改...
通过阅读ZooKeeper的Java API源码,我们可以深入了解其实现原理,例如Watch事件的触发机制、网络通信的细节、以及数据一致性保证的方法等。对于深入理解ZooKeeper的工作方式和优化分布式应用程序非常有帮助。 **7. ...
总的来说,Java蓝牙API提供了一套完整的框架,使得开发者无需深入了解蓝牙协议细节,就能够开发出跨平台的蓝牙应用。通过熟练掌握这些API,开发者可以实现设备的发现、连接,以及高效的数据传输,从而扩展Java应用...
简单工厂模式并不是GoF设计模式之一,但它作为设计模式的基础,在实际项目中被广泛使用。简单工厂模式的主要目的是将对象的创建与对象的使用分离,使代码更加灵活,易于扩展和维护。本文将详细介绍简单工厂模式的...
### Java设计模式学习笔记——外观模式(Facade Pattern) #### 概述 设计模式是软件工程领域中一种解决常见问题的可复用解决方案。在Java开发过程中,掌握设计模式能够帮助开发者更好地组织代码结构,提高代码的...
与之相对的是,Java 的 Collections API 提供了一套更加丰富、灵活且高效的解决方案。例如,在将数组的内容转换为字符串时,使用传统的数组需要显式地迭代每个元素并连接起来,而 Collections 的实现通常已经内置了 ...
总结来说,Java文件读写提供了丰富的API来处理各种文件操作。在处理大文件或需要限制文件大小的场景时,理解如何跟踪已写入的数据、适时关闭和创建新文件至关重要。这个过程涉及到文件流的管理和异常处理,确保数据...
总之,Java中`Date`和`String`的转换主要依赖于`SimpleDateFormat`,通过定义不同的模式,可以灵活地将日期转换为各种格式的字符串,或者将符合特定格式的字符串解析为日期。在实际开发中,确保模式与字符串匹配是...
Java的发布订阅(Publish-Subscribe)模型是一种设计模式,它基于“观察者”模式,用于在对象之间建立一种一对多的依赖关系。当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。这种模式在...
JAVA开发中的JDBC(Java Database Connectivity)API是用于在Java应用程序和各种数据库之间建立连接的一组接口和类。它提供了一种标准化的方式来访问多种不同类型的数据库,使得开发者无需关心具体的数据库实现细节...
### Java本地接口规范(JNI)详解 #### 一、Java本地接口的历史与演变 ##### JDK1.0的时代 ...通过深入理解JNI的工作原理和API细节,开发者可以构建出更加高效、稳定且具有高度互操作性的Java应用程序。
在Java中,外观模式的应用可以帮助我们更好地组织代码,降低系统的耦合度,并提高代码的可读性和易用性。 ### 外观模式的核心概念 1. **外观(Facade)角色**:这是对外系统或子系统的主要接口,客户端通过这个...
- **技术栈**: 使用Java语言编写,并采用了RESTful API的设计风格。 - **发布时间**: 最初发布于2015年5月22日,后续进行了多次更新,包括新增用户基本信息和跑步数据等功能。 ##### 2. 使用准备 - **注册**: ...
2. **字符串处理**:String类是Java中最常用的类之一,提供了大量的方法用于字符串的创建、比较、查找、替换等操作。 3. **集合框架**:Java集合框架是API中的重要部分,包括List、Set、Map等接口,以及ArrayList、...
以上只是Java API 1.8中的一部分重要特性,实际的API文档包含了更多细节和实例,帮助开发者深入理解和使用这些特性,提升开发效率和代码质量。对于Java开发者来说,熟悉并掌握Java 8 API是提升技能的必要步骤。