『Java言語で学ぶデザインパターン入門第3版』が出ていたので買ってみた。
有名な本だけど、(増補改訂版は)古いし Java 詳しくないしで手を出していなかったんだけど、リニューアルされたんじゃあ買うしかない。
著者のページ → https://www.hyuki.com/dp/
というわけで、Python で第2章の adapter パターンを実装してみた。
from abc import ABCMeta, abstractmethod
# 100VのAC電源、adaptee
class Banner:
def __init__(self, string: str) -> None:
self.string = string
def show_with_paren(self) -> None:
print(f"({self.string})")
def show_with_aster(self) -> None:
print(f"*{self.string}*")
# DC 12V で動くノートパソコン、target
class Print(metaclass=ABCMeta):
@abstractmethod
def print_weak(self) -> None:
pass
@abstractmethod
def print_strong(self) -> None:
pass
# adapter
class PrintBanner(Print):
def __init__(self, string: str) -> None:
self.banner = Banner(string)
def print_weak(self) -> None:
self.banner.show_with_paren()
def print_strong(self) -> None:
self.banner.show_with_aster()
def main() -> None:
p = PrintBanner("Hello")
p.print_weak()
p.print_strong()
if __name__ == "__main__":
main()
特に難しいところはなく、ABCMeta とかあったなーという感想。
p は元コードでは Print 型の変数になってるけど、Python だとめんどくさそう(というかこのままの方がよさそう?)なので PrintBanner のまま。
コメント