客户端如何与我的类图中的其他类相关联?

时间:2017-03-01 16:22:25

标签: java uml class-diagram

我将两个设计模式Observer和Composite结合起来,一切都很顺利。我的问题是关于类图。我把我班级图的图片放在这里 Es1ClassDiagConClient.jpg

在这里我把我的主要

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();
    }
}

所以问题很简单,也许我在这个问题上放了太多东西; 这与Observer和Component的关联好吗? (因为客户端有这两个类的引用)。 也许我应该使用依赖关系? (因为客户端创建了这两个类的某个子类的等值)。或者我应该将客户端与ConcreteObserver,Composite和Leaf类链接起来?

3 个答案:

答案 0 :(得分:1)

您只需要与ConcreteObserver关联,而不是<<abstract>>关联。观察者已经与Component建立了关联,因此您不需要客户端的任何依赖。

enter image description here

答案 1 :(得分:0)

有一点,Component和ConcreteObserver之间的链接应该是另一个方向吗? 如果我看Observer pattern,我觉得链接是另一个方向。

答案 2 :(得分:0)

enter image description here

所以,如果我理解,请告诉我,这是一个装饰模式,这是主要的

public class DecoratorPatternDemo {
   public static void main(String[] args) {

      Shape circle = new Circle();

      Shape redCircle = new RedShapeDecorator(new Circle());

      Shape redRectangle = new RedShapeDecorator(new Rectangle());
      System.out.println("Circle with normal border");
      circle.draw();

      System.out.println("\nCircle of red border");
      redCircle.draw();

      System.out.println("\nRectangle of red border");
      redRectangle.draw();
   }
}

这里客户端只与ShapeDecorator有关联,因为在main中,客户端创建一个新的RedShapeDecorator对象,它是ShapeDecorator的子类。客户端还创建一个Shape对象,但客户端不需要与Shape关联,因为ShapeDecorator类已经具有Shape的引用。我是对的吗?