Mediatorパターンをpython2.6で書いてみた。
たったひとりの相談役。親がすべての子供の状態を管理します。
# -*- coding: utf-8 -*- import abc # クラス抽象化を行うためのモジュール(requires python2.6 or later) class Child(object): # 相談する人(子) 一般名称はColleague:同僚 __metaclass__ = abc.ABCMeta @abc.abstractmethod def set_mother(self, mother): # 親のいる場所を記憶(宣言) pass @abc.abstractmethod def set_enabled(self, enabled): # 親の言う事を聞く(宣言) pass class Mother(object): # 相談され人(親) 一般名称はMediator:相談役 __metaclass__ = abc.ABCMeta @abc.abstractmethod def child_changed(self, child): # 子に変更があった時(宣言) pass class Heroine(Child): # 子の実装 def __init__(self, name): self.__name = name self.__system = None self.__likelevel = 0 self.__h_scene = False def set_mother(self, mother): # 親を記憶(実装) self.__system = mother def set_enabled(self, enabled): # 親の言うことを聞く(実装) self.__h_scene = enabled # @property def name(self): return self.__name @property def likelevel(self): return self.__likelevel def likelevelup(self): self.__likelevel += 1 # 自分自身に変更があったことを親に伝える self.__system.child_changed(self) # この部分はObserverパターン。子が親に報告します。 class ErogeSystem(Mother): # 親の実装 def __init__(self): self.__iincho = Heroine(u"いいんちょ") self.__akari = Heroine(u"あかり") self.__iincho.set_mother(self) self.__akari.set_mother(self) def child_changed(self, child): # 子に変更があった時(実装) print(u"changed {0}".format(child.name)) if self.__iincho.likelevel > 90: # いいんちょはストーキングで攻略できるが self.__iincho.set_enabled(True) elif self.__iincho.likelevel > 50 and self.__akari.likelevel > 90: # あかりは他のキャラの好感度も高くないと攻略不可。 self.__akari.set_enabled(True) else: pass @property def iincho(self): return self.__iincho @property def akari(self): return self.__akari if __name__ == "__main__": system = ErogeSystem() for i in xrange(100): system.akari.likelevelup() for i in xrange(60): system.iincho.likelevelup()