【デザインパターン勉強】adapterメソッド
ざっくり概要
adapterメソッドとはざっくり言うと既に 提供されているclassと既に必要な抽象classを結びつけてプログラムを作成する方法です。 ポイントは、仲介役classを設定(提供されているclassと必要な抽象class)することです。
登場メソッド
必要な抽象メソッド(抽象classに存在)
提供されているメソッド(提供されているclass)
本来であれば・・・
抽象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クラスの仲介役をします。 具体的には以下の手順となります。
- TextMake(必要な抽象クラス)をオーバーライドしてメソッドを宣言
- オーバーライドしたメソッドにFormat(提供されているclass)のメソッドを記述 これにより、必要な抽象class→提供されているClassの仲介を果たします。
感想
理解不足もあるかもしれませんが、利用シーンがあまり思い浮かびませんでした。。