Q&A
デザインパターンを勉強しています。
java.util.observer, java.util.observable を用いたObserverパターンを実装してみたのですが、期待通りに動いてくれません。
期待した動作
Subject = Boardクラス
Observer = MrObserverクラス
Boardクラスにあるボタンをクリックすると、MrObserverがそれを感知し、MrObserverが所有するRectangleの大きさと色が変わる、という動作を期待しています。
考えていること
Observerパターンは、以下の条件を満たせば機能すると考えています。抜け、漏れ、誤解などありましたら教えてくださると助かります。
1、Observer「MrObserver」は、implements Observer を実装
2、Subject「Board」は、Observableを継承
3、addObserverメソッドにより、Subjectは、Observerを把握
4、Subjectが何処かでnotifyObservers()を実行する
5、Observerのupdate()に処理してほしい内容を書く
Observerパターンについて、notifyObservers(), update()メソッドについて、以下の様に理解していますが、
その具体的なやり方がわかりません。
・SubjectがnotifyObservers()を実行すると、観察者側のupdate()メソッドが実行される
・notifyObservers()、update()のメソッドには引数を指定でき、そこでデータのやり取りが出来る
聞きたいこと
期待通りの結果にならない理由について、指定していただきたいと考えています。
宜しくお願い致します。
ソースコード
java
1public class JavaFX12 extends Application{ 2 3 @Override 4 public void start(Stage primaryStage) { 5 Board board = new Board(); 6 MrObserver observer = new MrObserver(); 7 board.addObserver(observer); 8 9 GridPane grid = board.grid; 10 GridPane grid2 = observer.grid; 11 VBox vbox = new VBox(); 12 vbox.getChildren().addAll(grid,grid2); 13 14 StackPane root = new StackPane(); 15 root.getChildren().add(vbox); 16 17 Scene scene = new Scene(root, 300, 250); 18 19 primaryStage.setScene(scene); 20 primaryStage.show(); 21 } 22 23 public static void main(String[] args) { 24 launch(args); 25 } 26}
java
1public class Board extends Observable{ 2 GridPane grid; 3 public Board(){ 4 grid = new GridPane(); 5 6 Button btn = new Button(); 7 btn.setOnAction((ActionEvent event) -> { 8 notifyObservers("string"); 9 }); 10 grid.add(btn, 0, 1); 11 } 12}
java
1public class MrObserver implements Observer{ 2 GridPane grid; 3 Rectangle rect; 4 public MrObserver(){ 5 grid = new GridPane(); 6 rect = new Rectangle(50,50); 7 rect.setFill(Color.RED); 8 grid.add(rect, 0, 0); 9 } 10 @Override 11 public void update(Observable o, Object arg) { 12 rect = new Rectangle(100,100); 13 rect.setFill(Color.BLUE); 14 } 15}
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2018/03/12 08:58
2018/03/13 05:49
2018/03/13 05:59
2018/03/13 07:33 編集
2018/03/13 07:39
2018/03/13 08:19
2018/03/13 09:04