A 에 해당하는 코드
package My;
public interface Subject1 extends Observer1{
public abstract void registerObserver(Observer1 o);
public abstract void removeObserver(Observer1 o);
public abstract void notifyObserver();
}
B에 해당하는 코드
package My;
public interface Observer1{
public abstract void update(float temp,float humi,float press);
}
c에 해당하는 코드
package My;
public interface DisplayElement {
public abstract void display();
}
a를 구현한 코드
package My;
import java.util.ArrayList;
public class WeatherData implements Subject1{
ArrayList<Observer1> observers;
public float temp ;
public float humi ;
public float press ;
public WeatherData(){
observers=new ArrayList<>();
}
@Override
public void update(float temp,float humi,float press) {
temp=this.temp;
humi=this.humi;
press=this.press;
}
@Override
public void registerObserver(Observer1 o) {
observers.add(o);
}
@Override
public void removeObserver(Observer1 o) {
int i = observers.indexOf(o);
if(i>=0){
observers.remove(i);
}
}
@Override
public void notifyObserver() {
for (int i = 0; i < observers.size(); i++) {
Observer1 observer = (Observer1)observers.get(i);
observer.update(temp, humi, press);
}
};
public void setMeasurements(float temp,float humi,float press){
this.temp=temp;
this.humi=humi;
this.press=press;
notifyObserver();
}
}
b와 c를 구현한 코드
package My;
public class CurrentConditionsDisplay extends WeatherData implements Observer1,DisplayElement{
float temp;
float humi;
float press;
Subject1 weatherdata;
public CurrentConditionsDisplay(WeatherData weatherdata){
this.weather>  this.weatherdata.registerObserver(this);
}
@Override
public void update(float temp, float humi, float press) {
this.temp=temp;
this.humi=humi;
this.press=press;
display();
}
@Override
public void display() {
System.out.println("온도:"+temp+"\t"+"습도:"+humi+"\t"+"기압:"+press);
}
}
main 코드
package My;
public class WeatherStation{
public static void main(String[] args) {
WeatherData weather WeatherData();
CurrentConditionsDisplay currentDisplay =new CurrentConditionsDisplay(weatherData);
weatherData.setMeasurements(80, 65, 30.4f);
weatherData.setMeasurements(82, 70, 29.2f);
weatherData.setMeasurements(78, 90, 29.2f);
}
}
제발 님이라도 알려주세요 나머지 병신새끼들이 하도 지랄해서 멘탈나갈꺼같아요
으 자바다
일단 패턴은 같으니까 , 지금은 a를 구현한 클라스에서 b와c를 구현한 클라스에 push해주는 방식인거같긴함 , 근데 내 질문은 왼쪽 그림에서는 가지는것만으로도 가능한데 오른쪽 그림은 상속을 받는건지가 궁금함
WeatherData클래스 보시면 setMeasurements가 있잖아요 이 메서드에서 notifyObserver를 하고있고 이 notifyObserver는 옵저버들을 update해요
푸쉬 맞음
오른쪽 그림은 상속받는다는게 무슨말?
저기서 상속한건 다양한 옵저버에 대한 인터페이스를 뚫는거에 불과함
그라믄 pulling 방식은 반대로 b와 c를 구현한 객체의 생성자에서 notify를 호출하는 방식인거네요 ?
그렇구나!
ㅇㅋ 방향만 반대임
이거 mvc의 근간이 되는 원리라서 나중에 써먹을곳 많음
그라믄 느슨한 결합방식을 해야 하는게 옳은거니까. 사실상 b를 상속한 a 클래스를 구현한 방식보다는 왼쪽이 조금더 진보된 형태인거임 ?
저 화살표는 상속이 아닐텐데
점 화살표가아닌 일자화살표에다가 속이 채워져있으면 상속아님 ?
점선+흰화살표 인터페이스만 따옴 실선+흰화살표 인터페이스에 구현까지 따옴
천사다 천사 원래 프갤럼들은 질문에 욕 한마디라도 나오는 순간 열심히 놀려먹기 바쁜데
20160525//푸쉬->푸시 (she를 제외하고 sh는 시로 표기함. 스킨십 멤버십 플래그십 플래시 등등...) [리듬 맞춤법 봇♬]