這兩個元件用完都需要呼叫 notifydatachange() 來更新畫面
Color.java
package com.test.observerpattern; public abstract class Color { protected DrawBoard drawBoard; public abstract void update(); }
DrawBoard.java
package com.test.observerpattern; import java.util.ArrayList; import java.util.List; public class DrawBoard { private Listcolors = new ArrayList (); private String state; public String getState() { return state; } public void setState(String state) { this.state = state; notifyAllObservers(); } public void addColor(Color observer) { colors.add(observer); } public void notifyAllObservers() { for (Color color : colors) { color.update(); } } }
Pain1.java
package com.test.observerpattern; public class Pain1 extends Color { public Pain1(DrawBoard drawBoard) { this.drawBoard = drawBoard; this.drawBoard.addColor(this); } @Override public void update() { System.out.println("Pain1's color is :"+drawBoard.getState()); } }
Pain2.java
package com.test.observerpattern; public class Pain2 extends Color { public Pain2(DrawBoard drawBoard) { this.drawBoard = drawBoard; this.drawBoard.addColor(this); } @Override public void update() { System.out.println("Pain2's color is :"+drawBoard.getState()); } }
testObserverPattern.java
package com.test.observerpattern; public class testObserverPattern { public static void main(String[] args) { DrawBoard drawBoard = new DrawBoard(); new Pain1(drawBoard); new Pain2(drawBoard); System.out.println("Change pain color to red"); drawBoard.setState("red"); System.out.println("Change pain color to white"); drawBoard.setState("white"); } }
console
Change pain color to red Pain1's color is :red Pain2's color is :red Change pain color to white Pain1's color is :white Pain2's color is :white
沒有留言:
張貼留言