Flyweight的定義:
?? 避免大量擁有相同內(nèi)容的小類開(kāi)銷(xiāo)(如消耗內(nèi)存),使大家共享一個(gè)類叫元類。
為什么使用:
???? 面向?qū)堑脑瓌t是一切都是對(duì)象,但如果對(duì)象數(shù)非常龐大,如果字處理軟件,對(duì)數(shù)據(jù)表的DAO操作。等耗內(nèi)存的操作,我們就要求同存異,找出共同體,設(shè)計(jì)為一個(gè)元類。另外一些特性取決于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("測(cè)試");
??cd.setYear(1998);
??Artist va=af.getArtist("裴");
??System.out.println(va.getName());
??af.getArtist("李");
??
??System.out.println(af.flyweights.size());
?}
}