頭脳一式

人の記憶なんて曖昧なもの。すべての情報を頭に記憶するなんてナンセンス。困ったらここに来ればいいじゃん?

デザインパターン

Singletonパターン

世の中には「世界に1つだけしか存在しないもの(2つ以上は存在しないもの)」がある。
オブジェクト指向の本質に鑑みれば「現実世界で1つだけ」のものは「JVM内の仮想世界でも1つだけであるべき」ということになる。
しかしクラスがある以上、newを行えば行った分だけインスタンスが生成されてしまう。
絶対に1回しかnewできないように、唯一無二のインスタンスを生成する手法をsingletonパターンという。

public final class singleton {
    private static singleton theInstance;    //インスタンス保持用変数
    private singleton(){}                    //プライベートコンストラクタ
    public static singleton getInstance(){    //インスタンス取得用メソッド
        if (theInstance == null){
            theInstance = new singleton();
        }
        return theInstance;
    }
}

コンストラクタがprivateになっている意味は、
「privateとは他のクラスは利用できないこと」→「このコンストラクタは他クラスから呼びだせない。」→「自身でしかnewできない。」 ということ。
他クラスはgetInstance()メソッドを呼び出すことで、戻り値としてインスタンスが取得できる仕組みになっている。
複数回getInstance()メソッドを呼び出したとしても、2回目以降は既にインスタンスがあるのでnewされず、1回目にnewしたときのインスタンスが返るようになっている。
↓↓他クラスからインスタンスを取得する記述例↓↓

singleton obj = new singleton(); //この記述はコンストラクタが不可視でコンパイルエラー。
singleton obj1 = singleton.getInstance(); //この記述でインスタンスを取得できる。  

Strategyパターン

一言でいうとクラスをプラグイン化する。
共通の抽象クラス(又はインターフェース)を持つ複数のクラスを準備しておき、どれをnewするかを状況に応じて切り替える設計のことを をStrategyパターンという。

GameMode Gm = null;
String mode = "easy";

switch (mode) {
case "easy":
    Gm = new EasyMode();
    break;

case "normal":
    Gm = new NormalMode();
    break;

case "hard":
    Gm = new HardMode();
    break;
default :
    Class<?> Class = Class.forName(mode);
    Gm = (GameMode) Class.newInstance();
}

デザインパターンFacade

Facadeと書いてファサードと読む。フランス語らしい。

執筆中…