『Rubyによるデザインパターン』(ラス・オルセン著 ピアソン・エデュケーション刊)の例をPythonに変換して書いています。目次
- Builderパターン(1)
- Builderパターン(2) ポリモーフィックなBuilder
- Builderパターン(3) Builderでオブジェクトの妥当性を保証する
- Builderパターン(4) Builderの再利用
Builderも一つのクラスなので、当然サブクラス化することが出来ます。
前項では単なるComputerを作りましたが、今回はデスクトップとラップトップの2種類のコンピュータを同時に作る事になりました。
デスクトップとラップトップでは、部品が違う事に注意しなければなりません。
class ComputerBuilder(object): def computer(self): return self._computer #デスクトップ・ラップトップ共通のコード class DesktopComputerBuilder(ComputerBuilder): def __init__(self): self._computer = DesktopComputer() def set_display(self, display): self._computer.display = display def add_cd(self, writable=False): self._computer.drives.append(Drive("cd", 760, writable)) def add_harddisk(self, size_in_mb): self._computer.drives.append(Drive("harddisk", size_in_mb, True)) class LaptopComputerBuilder(ComputerBuilder): def __init__(self): self._computer = LaptopComputer() def set_display(self, display): assert display!="lcd", "Laptop display must be lcd" self._computer.display = display def add_cd(self, writable=False): self._computer.drives.append(LaptopDrive("cd", 760, writable)) def add_harddisk(self, size_in_mb): self._computer.drives.append(LaptopDrive("harddisk", size_in_mb, True))