【デザインパターン勉強】Decoratorメソッド

ざっくり概要

decoratorとは 装飾 の意味です。 あるコアクラスを元にして機能をかぶせていく手法です。

今回は簡略化のために1つのコア、一つの機能をかぶせた例を用いて説明します。

コード

class PlainNumber():
    def __init__(self,num):
        self._num = num
    
class MultiplicationNumber(PlainNumber):
    def __init__(self,num):
        self._number = num
    
    def render(self,num):
        return self._number.render() * num

    
if __name__ == '__main__':
    plain_num = PlainNumber(11)
    multiple_output = MultiplicationNumber(plain_num)
    print("11*2=",multiple_output.render(2)) # 11*2= 22
    

ざっくり解説

コードの流れは以下の通りです。

  1. 数字を設定(PlainNumberクラス)を設定
  2. 掛け算(MultiplicationNumber)機能を追加し
  3. 数字×掛け算を実行

MultiplicationNumberはPlainNumberを継承しているので掛け算が実行出来ますね。

現実的な利用シーン(個人的感想)

  • 長所

開発のシーンでは、最初に決めた仕様し、実装し、あとから機能追加といったことがあると思います。 そういった際、設計を変えずに追加することが出来て、便利なんじゃないでしょうか。

  • 短所

デコレートをしすぎると管理しづらい気がします。(意図せず重複した機能を持ったクラスを追加するなど)そこらへんは長所とトレードオフな気がしますが

参考文献

Javaで学ぶデザインパターン入門 https://github.com/faif/python-patterns/blob/master/structural/decorator.py