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
相关文档:
1,概述:线程的挂起操作实质上就是使线程进入“非可执行”状态下,在这个状态下CPU不会分给线程时间片,进入这个状态可以用来暂停一个线程的运行;在线程挂起后,可以通过重新唤醒线程来使之恢复运行。当一个线程进入“非可执行”状态,即挂起状态时,必然存在某种原因使其不能继续运行,这些原因可能 ......
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
public class j5_13 extends Applet implements ActionListener
{
Panel p=new Panel();//新建布局
Label welcome,la1,li1,la2,li2,lresult;//提示标签,符号标签以及计算结果的标签
TextField ta,tb,t ......
public static void main(String[] args) {
String DATE_FORMAT = "yyyy-MM-dd";
java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
DATE_FORMAT);
Calendar c1 = Calendar.getInstance();
c1.set(1999, 0, 14);
&n ......
程序中的编码风格让我们的编程工作变得轻松,特别是程序维护员,他们要经常阅读其他人编写的程序编码,这一点尤其突出。编码规范从根本上解决了程序维护员的难题;规范的编码阅读和理解起来更容易,也可以快速的不费力气的借鉴别人的编码。对将来维护你编码的人来说,你的编码越优化,他们就越喜欢你的编码,理解起来也就越 ......
用三种方法来实现字符串的反转
/**
* @(#)ReverseString.java
*
* ReverseString application
*
* @author
* @version 1.00 2010/4/20
*/
import java.util.*;
import java.io.*;
public class ReverseString {
public static void main(String[] args) throws IOException{
......