시험을 위해이 작은 프로젝트를하고 있습니다. 나의 선생님은 uml에 대해 관심을 가지기 때문에 내 문제는 집계와 연관성에 관한 것입니다. (저는 이것이 많은 시간을 물어 보는 질문입니다). 프로젝트는 Component 컬렉션이있는 글로벌 옵저버이며 Component (Leaf 또는 Composite)가 상태를 변경할 때마다 관찰자에게 알립니다. 내 질문에 ConcreteObserver 및 구성 요소 간의 집계의 정확성에 대한 것입니다. ConcreteObserver 컬렉션의 구성 요소가 있지만 각 구성 요소는 관찰자에 대한 참조가 있습니다 (리프 및 합성에서 관찰자가 있음). 아마 내가 Component-> ConcreteObserver라는 관계를 추가해야 할까? 협회 ConcreteObserver1에> * 구성 요소 - - 어쩌면 나는 집계 ConcreteObserver 1을 변경해야합니다> * 컴 여기프로젝트의 연관과 집계에 관한 Uml
입니다 그리고 여기 나는 오래입니다 내 프로젝트의 전체 코드를 알고있다하지만 (이 복합 매우 유사하지만 아이들과 관련된 방법이 구현되지 않았기 때문에 나는 잎을 넣어하지 않음) 구성 요소를 여기 이다 콘크리트 관찰자와 콘크리트 구성 요소 (복합) 에주의를 지불해야
//Component
public interface Component {
public void op();
public void add(Component c);
public void remove(Component c);
public List <Component> getChild();
public void setState(int x);
public int getState();
public String getName();
}
//Composite
public class Composite implements Component {
private int state;
private String name;
private Observer observer;
private List <Component> comps = new ArrayList <Component>();
public Composite(String name, Observer observer){
this.name = name;
this.observer = observer;
this.observer.add(this);
}
@Override
public void setState(int x){
this.state = x;
observer.update(name);
}
@Override
public int getState(){
return state;
}
@Override
public String getName(){
return name;
}
@Override
public void op() {
System.out.println("sono una foglia");
}
@Override
public void add(Component c) {
comps.add(c);
}
@Override
public void remove(Component c) {
comps.remove(c);
}
@Override
public List<Component> getChild() {
List <Component> cc = new ArrayList <Component>();
for (Component zen : comps){
cc.add(zen);
}
return cc;
}
}
//Observer
public abstract class Observer {
public abstract void update(String name);
public abstract void add(Component c);
}
//ConcreteObserver
public class ConcreteObserver extends Observer {
private List <Component> components = new ArrayList <Component>();
@Override
public void update(String name){
for(Component zen : components){
if(zen.getName()==name){
System.out.println("the state of " + name + " is changed, now it's " + zen.getState());
}
}
}
@Override
public void add(Component c){
components.add(c);
}
public void printAllState(){
for(Component zen : components){
System.out.println("the state of " + zen.getName() + " is " + zen.getState());
}
}
}
//main
public class Compito24Febbraio2017 {
public static void main(String[] args) {
ConcreteObserver o = new ConcreteObserver();
Composite c1 = new Composite ("c1",o);
Leaf l1 = new Leaf("l1",o);
Leaf l2 = new Leaf("l2",o);
c1.add(l1);
c1.add(l2);
c1.setState(5);
l1.setState(4);
o.printAllState();
}
}
정말 이해가 안되는데, 나는 집계를 무시해야합니까? 그래서 ConcreteObserver와 Component 사이의 집계를 제거해야합니까? –
존재 여부는 차이가 없습니다. 공유 집계에는 합의 된 의미가 없습니다. –
이것은 ConcreteObserver에 컴포넌트 콜렉션을 넣었 기 때문에 집계가 약간 중복되었습니다. –