ときにオブザーバーパターンを使用してオブジェクト間の多くの関係。オブジェクトが変更されたとき、例えば、それは自動的に従属オブジェクトを通知されます。Observerパターンは、モデルのタイプに属します。
<?PHPの クラス件名{ プライベート の$ observer_list 。 プライベート $ num個。 パブリック 関数__construct(){ $この - > observer_list = 新しいSplDoublyLinkedList(); } パブリック 関数(観察アタッチ$オブザーバ){ $この - > observer_list->プッシュ($オブザーバ) } パブリック 関数 setNum($のNUM ){ $この - > NUM = $ NUM 。 これを$ - > 通知(); } パブリック 関数getNum(){ 戻り $この - > NUM。 } パブリック 関数は、(){通知 するforeach($この - > observer_list として $オブザーバ{) $オブザーバ - > ;更新() } } } 抽象 クラスオブザーバー{ 公共 の$ SUBJ 。 パブリック 関数 __construct(被写体の$ SUBJ ){ $この - > SUBJ = $ SUBJ 。 $この- > subj->(添付$この)。 } 抽象 関数更新()。 } クラス BinObserverは延びオブザーバー{ パブリック 関数の更新(){ エコー "二进制更新:"。decbin($この - > subj-> getNum()) "\ n"は、 } } クラス OctObserverは延びオブザーバー{ パブリック 関数の更新(){ エコー "八进制更新:"。煎じ出す($この - > subj-> getNum()) "\ n"は、 HexObserverは延びオブザーバー{ パブリック 関数の更新(){ エコー "十六进制更新:"。dechex($この - > subj-> getNum()) "\ n"は、 } } $対象 = 新しいテーマ()。 新しい BinObserver($対象)。 新しい OctObserver($対象)。 新しい HexObserver($対象)。 $主題 - > setNum(22)。
結果:
バイナリアップデート:10110 進更新: 26 進更新: 16
ます。https://www.cnblogs.com/itsuibi/p/11058164.htmlで再現