Flyweight design pattern


Flyweight定義:
メモリの消費など、同じコンテンツを持つ小さなクラスのオーバーヘッドを大量に回避し、クラス(メタクラス)を共有します.
なぜ使いますか.
オブジェクト向け言語の原則はすべてオブジェクトですが、実際に使用すると、オブジェクト数が膨大に見える場合があります.例えば、ワープロソフトウェアでは、文字ごとにオブジェクトとして、数千文字、オブジェクト数が数千文字で、メモリが消費されることは間違いありません.では、私たちはやはり「共通点を見つけて保存する」ことで、これらのオブジェクト群の共通点を見つけ、メタクラスを設計します.パッケージは共有することができるクラスであり、また、いくつかの特性はアプリケーション(context)に依存し、共有できないものであり、Flyweightの2つの重要な概念の内部状態intrinsicと外部状態extrinsicの区別である.
白点というのは、まずオリジナルのモデルをつまんで、それから異なる場合と環境に従って、それぞれ特徴のある具体的なモデルを生成して、明らかにここで異なる新しいオブジェクトを生成する必要があるので、FlyweightモードではFactoryモードがよく現れる.Flyweightの内部状態は共有に用いるものであり、Flyweight factoryはFlyweight pool(モードプール)を維持して内部状態のオブジェクトを格納する.
Flyweightモードはプログラムの効率と性能を高めるモードであり、プログラムの運行速度を大幅に速めることができる.多くの場合、データベースから一連の文字列を読み込むなど、重複する文字列が多い場合は、Flyweightプールに格納することができます.
public class Artist{
  	private String name;
	public Artist(String name){
		this.name = name;
	}
	public String getName(){
		return name;
	}
}

public class ArtistFactory{
	Hashtable hashtable = new Hashtable();
	public Artist getArtist(String key){
		Artist result = (Artist) hashtable .get(key);
		if(result == null){
			result = new Artist(key);
			hashtable .put(key, result);
		}
		return result;
	}
}