gpt4 book ai didi

Java 语法 : Who can an interface be an object?

转载 作者:行者123 更新时间:2023-11-30 07:20:24 24 4
gpt4 key购买 nike

我目前正在研究观察者模式,但遇到了一些困惑。

当我读到这行代码时:

IObserverSubscribe user1= new ConcreteObserverYoutubeUser();

我认为接口(interface) IObserverSubscribe user1 正在创建和实例化 new ConcreteObserverYoutubeUser()。这让我有点困惑,因为通常声明的同一个类也在实例化。是不是应该这样:

IObserverSubscribe user1= new IObserverSubscribe();

为什么接口(interface)装饰可以实例化另一个类?

完整代码如下:

主要内容:

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");

}

}

最佳答案

new IObserverSubscribe();

这是非法的,因为您无法实例化接口(interface) - 根据定义,它们没有任何...它们方法的定义。

IObserverSubscribe user1= new ConcreteObserverYoutubeUser();

这里的左边表示 user1atleast IObserverSubscribe 类型,即指向一个实例,其类型实现了接口(interface).

另一方面,右侧实际上创建具体类型的实例并分配给user1。这是可能的,因为具体类型实现了接口(interface)

关于Java 语法 : Who can an interface be an object?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14056799/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com