Kanade Logoカナデ Kanade

7. デコレーターパターン (Decorator)

オブジェクトに殻を被せるように動的に機能を追加するデコレーターパターンについて学びましょう。

デコレーターパターン (Decorator Pattern)

コーヒーを注文する時、基本のコーヒーにショットを追加して、そこにミルクを追加して、ホイップクリームまで乗せたら新しいコーヒーになりますよね?既存のコードを修正せずにオブジェクトを包んで新しい機能を付け加える方式をデコレーターパターンと言いますね。

(参考:全てのコーヒーが持つべき基本性質です)
【コーヒー】を規定しよう:
    【数字】を返す〈価格〉がなければならない()
    【文字列】を返す〈説明〉がなければならない()

(参考:ベースとなる基本コーヒーです)
【コーヒー】に従う【基本コーヒー】を設計しよう:
    【数字】を返す〈価格〉を作ろう():
        3000を返そう
        
    【文字列】を返す〈説明〉を作ろう():
        「エスプレッソ」を返そう

(参考:コーヒーを包んでミルクを追加するデコレーターです)
【コーヒー】に従う【ミルク追加】を設計しよう:
    『元のコーヒー』を【コーヒー】の空っぽに隠そう
    
    最初に作られる時(【コーヒー】の『コーヒー』)次のようにしよう:
        『私』の『元のコーヒー』を『コーヒー』にしよう
        
    【数字】を返す〈価格〉を作ろう():
        『私』の『元のコーヒー』の〈価格〉()+500を返そう
        
    【文字列】を返す〈説明〉を作ろう():
        枠「{『私』の『元のコーヒー』の〈説明〉()}+ミルク」を返そう

(参考:基本コーヒーを先に作って)
『私のコーヒー』を【コーヒー】の新しい【基本コーヒー】()にしよう

(参考:ミルクで殻を被せます!)
『ラテ』を【コーヒー】の新しい【ミルク追加】(『私のコーヒー』)にしよう

枠「メニュー:{『ラテ』の〈説明〉()}」を出力しよう
枠「価格:{『ラテ』の〈価格〉()}ウォン」を出力しよう

プレイグラウンド (Playground)

ターミナル
コードを書いて「実行」ボタンを押してください。