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

ざっくり概要

Facade(建物の正面)という意味を指しています。 このパターンは内部の処理を簡素化したクラスを一つにすることで、複雑な処理を見せないメソッドです。

自分なりの言葉で言うと、処理を一つのクラスに集約したら見通して良くなって、すぐわかるんじゃね? ということです。

コード

ココのコードを利用して説明します。

import time

class TC1:
    
    def run(self):
        print("test1")
        print("settup")
        print("finish")
        time.sleep(0.1)

class TC2:
    
    def run(self):
        print("test2")
        print("settup")
        print("finish")
        time.sleep(0.1)

        
class TC3:
    
    def run(self):
        print("test3")
        print("settup")
        print("finish")
        time.sleep(0.1)

class TestRunner:
    
    def __init__(self):
        self.tc1 = TC1()
        self.tc2 = TC2()
        self.tc3 = TC3()
        self.tests = [self.tc1,self.tc2,self.tc3]
    
    def runAll(self):
        [i.run() for i in self.tests]

if __name__ == '__main__':
    testrunner = TestRunner()
    testrunner.runAll()

ざっくり解説

TestRunnerクラス

このクラスで処理をまとめています。 具体的にはTC1~3で標準出力するメッドをrunAllに集約しています。

今回はTC1~TC3という3つのクラスのメソッドを用いて集約してますが、 もっと複雑なケースを考えてみます。

  • そのままAクラスはインスタンス化して、
  • Aのメソッドを呼び出し
  • Bクラスメソッドを使って

・・・C、D、E、F、Gの処理へ続く。

といったケースですと、複雑で何しているかわからなくなりますね。

一つのクラス(窓口)に集約化することで見通しが良くなります。 クラス名もわかりやすく(例えば、MakeCSV具体的な作業を明示) とか、わかりやすくすれば初見の人でも通りやすくなるんじゃないでしょうか。

利用方法

個人開発をしている人にはあまり実りのあるメソッドとはいえないと思います(処理の流れをわかっているため)。 しかしながら、何人も関わっている開発プロダクトの場合、は必須のパターンだと思います。

参考文献

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