私は現在オブザーバーパターンを研究していますが、混乱が生じています。
このコード行を読んだとき:
IObserverSubscribe user1= new ConcreteObserverYoutubeUser();
IObserverSubscribe user1
インターフェイスはを作成してインスタンス化していると思いますnew ConcreteObserverYoutubeUser()
。通常、宣言されているのと同じクラスもインスタンス化されているため、これは少し混乱します。次のようになります。
IObserverSubscribe user1= new IObserverSubscribe();
インターフェイス装飾が別のクラスをインスタンス化できるのはなぜですか?
以下の完全なコード:
主要:
package observerpattern;
public class ObserverPattern {
/**
* The observer pattern is a software design pattern in which
* an object, called the subject, maintains a list of its dependents,
* called observers, and notifies them automatically of any
* state changes, usually by calling one of their methods.
* It is mainly used to implement distributed event handling systems.
* The Observer pattern is also a key part in the familiar
* Model View Controller (MVC) architectural pattern.
*/
public static void main(String[] args) {
SubjectYouTubeChannel sytc= new SubjectYouTubeChannel();// create youtube channel
IObserverSubscribe user1= new ConcreteObserverYoutubeUser();
IObserverSubscribe user2= new ConcreteObserverYoutubeUser();
IObserverSubscribe moderator1= new ConcreteObserverYoutubeModerator();
sytc.Subscribe(user1);
sytc.Subscribe(user2);
sytc.Subscribe(moderator1);
sytc.Unsubscribe(user2);
sytc.notifySubscribers();
}
}
主題:
package observerpattern;
import java.util.ArrayList;
import java.util.List;
import observerpattern.IObserverSubscribe;
public class SubjectYouTubeChannel {
private List<IObserverSubscribe> subscribers = new ArrayList<IObserverSubscribe>();
public void Subscribe(IObserverSubscribe ios){
subscribers.add(ios);
}
public void Unsubscribe(IObserverSubscribe ios){
subscribers.remove(ios);
}
public void notifySubscribers(){
for(IObserverSubscribe ios : subscribers ){
ios.Notify();
}
}
}
インターフェイスオブザーバー:
package observerpattern;
public interface IObserverSubscribe {
void Notify();
}
具体的なオブザーバー:
package observerpattern;
public class ConcreteObserverYoutubeUser implements IObserverSubscribe{
@Override
public void Notify() {
System.out.println("User watches video, comments, ect");
}
}