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

ざっくり概要

adapterメソッドとはざっくり言うと既に 提供されているclassと既に必要な抽象classを結びつけてプログラムを作成する方法です。 ポイントは、仲介役classを設定(提供されているclassと必要な抽象class)することです。

登場メソッド

必要な抽象メソッド(抽象classに存在)

  • make_csv(CSVファイル内容作成)
  • make_txt(TXTファイル内容作成)

提供されているメソッド(提供されているclass)

  • make_file_csv(CSVファイル書き込み)
  • make_file_txt(TXTファイル書き込み)

本来であれば・・・

抽象classと提供されているclassのメソッドを同一化すれば問題ないです が、 今回は 所々の事情で 修正出来ないケースを想定しています。

コード

#python3.5.2
import abc
import os
import csv

class Format:
    def __init__(self,content):
        self.__content = content
    
    def make_file_csv(self,file_name):
        f = open('{}.csv'.format(file_name),'w')
        f.write(self.__content)
    
    def make_file_txt(self,file_name):
        f = open('{}.txt'.format(file_name),'w')
        f.write(self.__content)


class TextMake(metaclass=abc.ABCMeta):
    @abc.abstractmethod
    def make_csv(self):
        pass
    
    @abc.abstractmethod
    def make_txt(self):
        pass

class TextMakeFormat(TextMake,Format):
    def __init__(self,content):
        super().__init__(content)
    
    def make_csv(self,file_name):
        self.make_file_csv(file_name)
    
    def make_txt(self,file_name):
        self.make_file_txt(file_name)


if __name__ == '__main__':
    textobj = TextMakeFormat('おはようございます。\n今日も元気で頑張りましょう。')
    textobj.make_csv("csv_file") #TextMakeFormatを経由してcsvファイル作成
    textobj.make_txt("txt_file") #TextMakeFormatを経由してtxtファイル作成

各クラスの概要

Format(提供されているclass)

具体的処理メソッド(csv txtファイル作成)が記述されています。

TextMake(必要な抽象クラス)

既に必要とされているケースであり、メソッド(≠Formatのメソッド)が記述されています。

TextMakeFormat(仲介役)

FormatとTextMakeクラスの仲介役をします。 具体的には以下の手順となります。

    1. TextMake(必要な抽象クラス)をオーバーライドしてメソッドを宣言
    1. オーバーライドしたメソッドにFormat(提供されているclass)のメソッドを記述 これにより、必要な抽象class→提供されているClassの仲介を果たします。

感想

理解不足もあるかもしれませんが、利用シーンがあまり思い浮かびませんでした。。

参考文献

Javaで学ぶデザインパターン入門