Flyweight的定義:
?? 避免大量擁有相同內容的小類開銷(如消耗內存),使大家共享一個類叫元類。
為什么使用:
???? 面向對角的原則是一切都是對象,但如果對象數非常龐大,如果字處理軟件,對數據表的DAO操作。等耗內存的操作,我們就要求同存異,找出共同體,設計為一個元類。另外一些特性取決于context是不可共享的。
使用例子如:
package com.pdw.pattern;
import java.util.*;
class CD{
?private String title;
?private int year;
?private Artist artist;
?
?
?public Artist getArtist() {
??return artist;
?}
?public void setArtist(Artist artist) {
??this.artist = artist;
?}
?public String getTitle() {
??return title;
?}
?public void setTitle(String title) {
??this.title = title;
?}
?public int getYear() {
??return year;
?}
?public void setYear(int year) {
??this.year = year;
?}
?
?
}
class Artist{
?private String name;
?public String getName(){
??return this.name;
?}
?public Artist(String n){
??this.name=n;
?}
?
}
class ArtistFactory{
?
?Hashtable flyweights=new Hashtable();
?Artist getArtist(String key){
??Artist result;
??result=(Artist)flyweights.get(key);
??if(result==null){
???result=new Artist(key);
???flyweights.put(key,result);
??}
??return result;
?}
}
public class FlyweightImpl {
?/**
? * @param args
? */
?public static void main(String[] args) {
??CD cd=new CD();
??ArtistFactory af=new ArtistFactory();
??cd.setArtist(new Artist("李"));
??cd.setTitle("測試");
??cd.setYear(1998);
??Artist va=af.getArtist("裴");
??System.out.println(va.getName());
??af.getArtist("李");
??
??System.out.println(af.flyweights.size());
?}
}
posted on 2006-07-09 22:50
有貓相伴的日子 閱讀(341)
評論(0) 編輯 收藏 所屬分類:
Patterns