Flyweight パターン

Flyweight パターン

MyMain

public class MyMain {
    public static void main(String args[]) {
        MyPool pool = new MyPool();

        MyAlbum album = pool.getEmployee("TWIST", "サイコーな Rock You!");
        if (album != null)
            System.out.println(album.albumName + ", " + album.musicName);

        album = pool.getEmployee("ROCK'N'ROLL", "トレジャー・ハンター");
        if (album != null)
            System.out.println(album.albumName + ", " + album.musicName);

        album = pool.getEmployee("ONLY ONE", "ONLY ONE");
        if (album != null)
            System.out.println(album.albumName + ", " + album.musicName);

        album = pool.getEmployee("TWIST", "Shake Me");
        if (album != null)
            System.out.println(album.albumName + ", " + album.musicName);
    }
}

MyAlbum

public class MyAlbum {
    public String albumName;
    public String musicName;

    public MyAlbum(String albumName) {
        this.albumName = albumName;
    }
}

MyPool

public class MyPool {
    private Map<String, MyAlbum> pool;

    public MyPool() {
        pool = new HashMap<String, MyAlbum>();
        // 予め プールしておく
        pool.put("TWIST",       new MyAlbum("TWIST"));
        pool.put("ROCK'N'ROLL", new MyAlbum("ROCK'N'ROLL"));
    }

    public void putEmployee(MyAlbum album) {
        pool.put(album.albumName, album);
    }

    public MyAlbum getEmployee(String albumName, String musicName) {
        MyAlbum album = pool.get(albumName);
        // 予め プールしておいたものだけ、使用可能
        if (album != null) {
            // 共有オブジェクトを書き換え
            album.musicName = musicName;
        }
        return album;
    }
}

実行結果

L:\>java MyMain
TWIST, サイコーな Rock You!
ROCK'N'ROLL, トレジャー・ハンター
TWIST, Shake Me