オブザーバーパターン
14592 ワード
つのオブジェクトが状態を変更すると、すべての依存関係が通知され、自動的に更新されるように、オブジェクト間の1対多依存性を定義します.
参加者
具体的なObjectObject:具体的オブザーバーへの関心の状態を格納します.その状態が のとき、そのオブザーバーに通知を送ります Observer :対象の変更を通知するオブジェクトの更新インターフェイスを定義します. ArticteObserver :具体的なオブジェクトオブジェクトへのリファレンスを保持します.対象との状態を維持する必要があります状態を格納します.オブザーバーの更新インターフェイスを実装し、その状態を対象と一致させ続けます.
コード
参加者
サブジェクト:そのオブザーバーを知っている.オブザーバーオブジェクトの任意の数は、被写体を観察することができます.オブザーバーオブジェクトをアタッチして分離するインターフェイスを提供します.
コード
public class Main {
public static void main(String[] args) {
ConcreteSubject s = new ConcreteSubject();
s.attach(new ConcreteObserver(s, "X"));
s.attach(new ConcreteObserver(s, "Y"));
s.attach(new ConcreteObserver(s, "Z"));
s.setSubjectState("ABC");
s.notifyObservers();
}
}
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer o : observers) {
o.update();
}
}
}
public class ConcreteSubject extends Subject {
private String subjectState;
public String getSubjectState() {
return subjectState;
}
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
}
}
public interface Observer {
void update();
}
public class ConcreteObserver implements Observer {
private String name;
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject subject, String name) {
this.subject = subject;
this.name = name;
}
@Override
public void update() {
String observerState = subject.getSubjectState();
System.out.println("Observer " + name + " state is " + observerState);
}
}
出力
Observer X state is ABC
Observer Y state is ABC
Observer Z state is ABC
Java組み込みオブザーバ
public class Main {
public static void main(String[] args) {
ConcreteSubject s = new ConcreteSubject();
s.addObserver(new ConcreteObserver(s, "X"));
s.addObserver(new ConcreteObserver(s, "Y"));
s.addObserver(new ConcreteObserver(s, "Z"));
s.setSubjectState("ABC");
s.notifyObservers();
}
}
import java.util.Observable;
public class ConcreteSubject extends Observable {
private String subjectState;
public String getSubjectState() {
return subjectState;
}
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
setChanged();
}
}
import java.util.Observable;
import java.util.Observer;
public class ConcreteObserver implements Observer {
Observable subject;
private String name;
public ConcreteObserver(Observable subject, String name) {
this.subject = subject;
this.name = name;
}
@Override
public void update(Observable obs, Object arg) {
if(obs instanceof ConcreteSubject) {
ConcreteSubject observable = (ConcreteSubject)obs;
System.out.println("Observer " + name + " state is " + observable.getSubjectState());
}
}
}
エディエルジュリアン61
/
デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
public class Main {
public static void main(String[] args) {
ConcreteSubject s = new ConcreteSubject();
s.attach(new ConcreteObserver(s, "X"));
s.attach(new ConcreteObserver(s, "Y"));
s.attach(new ConcreteObserver(s, "Z"));
s.setSubjectState("ABC");
s.notifyObservers();
}
}
public class Subject {
private List<Observer> observers = new ArrayList<>();
public void attach(Observer observer) {
observers.add(observer);
}
public void detach(Observer observer) {
observers.remove(observer);
}
public void notifyObservers() {
for (Observer o : observers) {
o.update();
}
}
}
public class ConcreteSubject extends Subject {
private String subjectState;
public String getSubjectState() {
return subjectState;
}
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
}
}
public interface Observer {
void update();
}
public class ConcreteObserver implements Observer {
private String name;
private ConcreteSubject subject;
public ConcreteObserver(ConcreteSubject subject, String name) {
this.subject = subject;
this.name = name;
}
@Override
public void update() {
String observerState = subject.getSubjectState();
System.out.println("Observer " + name + " state is " + observerState);
}
}
Observer X state is ABC
Observer Y state is ABC
Observer Z state is ABC
Java組み込みオブザーバ
public class Main {
public static void main(String[] args) {
ConcreteSubject s = new ConcreteSubject();
s.addObserver(new ConcreteObserver(s, "X"));
s.addObserver(new ConcreteObserver(s, "Y"));
s.addObserver(new ConcreteObserver(s, "Z"));
s.setSubjectState("ABC");
s.notifyObservers();
}
}
import java.util.Observable;
public class ConcreteSubject extends Observable {
private String subjectState;
public String getSubjectState() {
return subjectState;
}
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
setChanged();
}
}
import java.util.Observable;
import java.util.Observer;
public class ConcreteObserver implements Observer {
Observable subject;
private String name;
public ConcreteObserver(Observable subject, String name) {
this.subject = subject;
this.name = name;
}
@Override
public void update(Observable obs, Object arg) {
if(obs instanceof ConcreteSubject) {
ConcreteSubject observable = (ConcreteSubject)obs;
System.out.println("Observer " + name + " state is " + observable.getSubjectState());
}
}
}
エディエルジュリアン61
/
デザインパターン
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
public class Main {
public static void main(String[] args) {
ConcreteSubject s = new ConcreteSubject();
s.addObserver(new ConcreteObserver(s, "X"));
s.addObserver(new ConcreteObserver(s, "Y"));
s.addObserver(new ConcreteObserver(s, "Z"));
s.setSubjectState("ABC");
s.notifyObservers();
}
}
import java.util.Observable;
public class ConcreteSubject extends Observable {
private String subjectState;
public String getSubjectState() {
return subjectState;
}
public void setSubjectState(String subjectState) {
this.subjectState = subjectState;
setChanged();
}
}
import java.util.Observable;
import java.util.Observer;
public class ConcreteObserver implements Observer {
Observable subject;
private String name;
public ConcreteObserver(Observable subject, String name) {
this.subject = subject;
this.name = name;
}
@Override
public void update(Observable obs, Object arg) {
if(obs instanceof ConcreteSubject) {
ConcreteSubject observable = (ConcreteSubject)obs;
System.out.println("Observer " + name + " state is " + observable.getSubjectState());
}
}
}
メインデザインパターン
アイドル・ Sep 27・ 1分読む
#designpatterns
#creational
#structural
#behavioral
Reference
この問題について(オブザーバーパターン), 我々は、より多くの情報をここで見つけました https://dev.to/eidher/observer-pattern-b18テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol