Java设计模式之Flyweight模式
GOF:运用共享技术有效地支持大量细粒度的对象。
解释一下概念:也就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以
了,不必每个都去实例化一个对象。比如说(这里引用GOF书中的例子)一个文本系统,每个字母定一个对象,那么大小写字母一共就是52个,那么就要定义
52个对象。如果有一个1M的文本,那么字母是何其的多,如果每个字母都定义一个对象那么内存早就爆了。那么如果要是每个字母都共享一个对象,那么就大大
节约了资源。
在Flyweight模式中,由于要产生各种各样的对象,所以在
Flyweight(享元)模式中常出现Factory 模式。Flyweight的内部状态是用来共享的,Flyweight
factory负责维护一个对象存储池(Flyweight
Pool)来存放内部状态的对象。Flyweight模式是一个提高程序效率和性能的模式,会大大加快程序的运行速度.应用场合很多,下面举个例子:
先定义一个抽象的Flyweight类:
package Flyweight;
public abstract class Flyweight
...
{
public abstract void operation();
}//end abstract class Flyweight
在实现一个具体类:
package Flyweight;
public class ConcreteFlyweight extends Flyweight
...
{
private String string;
public ConcreteFlyweight(String str)
...
{
string = str;
}//end ConcreteFlyweight(...)
public void operation()
...
{
System.out.println("Concrete---Flyweight : " + string);
}//end operation()
}//end class ConcreteFlyweight
实现一个工厂方法类:
package Flyweight;
import java.util.Hashtable;
public class FlyweightFactory
...
{
private Hashtable flyweights = new Hashtable();//----------------------------1
public FlyweightFactory() ...{}
public Flyweight getFlyWeight(Object obj)
...
{
Flyweight flyweight = (Flyweight) flyweights.get(obj);//----------------2
if(flyweight == null) ...{//---------------------------------------------------3
//产生新的ConcreteFlyweight
flyweight = new ConcreteFlyweight((String)obj);
flyweights.put(obj, flyweight);//--------------------------------------5
}
r
相关文档:
先来了解一下链表模式的原理:
首先写一个JavaBean,内容是要添加的元素和该元素的节点。
public class NodeBean implements Serializable
{
private Object data; //元素本身
private NodeBean next; //下一个节点
&n ......
JAVA中用于处理字符串的“三兄弟”
JAVA中用于处理字符串常用的有三个类:java.lang.String、java.lang.StringBuffer、java.lang.StringBuilder,这三者的共同之处都是final类,不允许被继承,这主要是从性能和安全性上考虑的,因为这几个类都是经常被使用着的,且考虑到防止其中的参数被修改影响到其它的应用。 ......
org.apache.commons.net.ftp.*中的FTPClient类实现的FTP上传下载功能:
需导入Apache的commos-net的jar包,若导入的是1.4版本的包,则FTPFile[] fileList = ftpClient.listFiles()的执行过程中可能会报错,此时更换导入2.0版本的jar包,问题即可解决。
代码如下:
package com.java.ftp;
import java.io.File;
import ......
转 : http://www.jcourse.cn/read/234
2009-03-02 作者:
zhangtaolv
在我们日常开发中,经常会遇到对文本的操作,并且在一般的MIS系统中,文本操作尤为多,如用户名、文章内容、文章标题、合同内容等。在之前的教程中,我也给大家讲解了Java中最基本的字符串操作的类,String。在之前的教程中我也给大家讲了Str ......
java中的URLEncoder和URLDecoder类
URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法。
为了解决web设计中不同操作系统间的差异性,我们在URL中使用的字符就必须是一个ASCII字符集的固定字集中的元素,具体如下:
1.大写字母A-Z
2.小写字母a- ......