글자 하나의 그래픽 객체가 그룹과 사각형으로 확장 된 컴포지션 패턴이 사용되었습니다. 그룹은 많은 직사각형과 그룹을위한 paint() 메소드 호출을 가질 수 있고, 직사각형의 페인트 메소드를 호출 할 수 있으며, 각 사각형은 그 자체를 그립니다.이 컴포지션의 데코레이터 패턴 사용
이제 어떻게 든 왼쪽 또는 오른쪽에 사각형을 정렬하기 위해 데코레이터 패턴을 사용해야합니다. 이제 그룹에 데코레이터를 사용하면 그룹 좌표를 정렬합니다. 그러나 모든 사각형이 그려지기 때문에 효과가 없습니다.
그래서 여기에 장식 패턴을 어떻게 사용할 수 있습니까?
내가 사용하는 유일한 방법은 모든 사각형 주위의 장식 자 래퍼와 그룹의 모든 요소를 정렬해야한다는 것입니다. 그러나 이것은 데코레이터 패턴의 정책에 어긋나지 않는가? 그룹은 기술적으로 목록에 무엇이 있는지 모릅니다. elemnts는 GraphicObject 인스턴스이고 사각형은 사각형을 그리기 전에 좌표를 수정하는 데코레이터로 둘러싸여 있습니다.) 메소드를 호출합니다.
이것이 유일한 방법 인 경우 어떻게 그 항목을 꾸미는데 사용합니까? 여기에 반성을 사용해야합니까, 아니면 다른 /보다 정확한 방법이 있습니까?
일부 코드 : I 그룹에 추가하기 전에 장식 내부의 사각형을두고있어 어디 다섯 번째 줄에서 잘if (mainGroup == null) {
mainGroup = new Group();
// first line
currentBounds = convertToBoundsForLine(x, y, width, lineHeight, 1);
//System.out.format("current bounds: x1=%d, y1=%d, x2=%d, y2=%d%n", currentBounds.getX(), currentBounds.getY(), currentBounds.getX2(), currentBounds.getY2());
GraphicObject rect1 = new Rectangle(currentBounds);
mainGroup.addChild(rect1);
// other lines...
// fifth line
currentBounds = convertToBoundsForLine(x, y, width, lineHeight, 5);
//System.out.format("current bounds: x1=%d, y1=%d, x2=%d, y2=%d%n", currentBounds.getX1(), currentBounds.getY1(), currentBounds.getX2(), currentBounds.getY2());
GraphicObject rect5 = new Rectangle(currentBounds);
// this is with the decorator wrapper around - should I use reflection here?
GraphicObject blabla = new DecoratorLeft(rect5);
mainGroup.addChild(blabla);
, 당신이 볼 수있는, 그래서 반사를 사용하는 모든 그들을 사용해야합니다 그룹에 추가되는 직사각형. 아니면 더 좋은 방법이 있을까요?
아니면 일반적으로 여기에 데코레이터를 완전히 사용하는 방식입니까? 사전에
감사합니다.
는편집 :
가 여기 내 페인트 방법은 그룹의 구현 방법은 :
public void draw(Graphics g, AlignStrategy align) {
for (GraphicObject graphic: children) {
graphic.draw(g, align);
}
}
그룹은 단지 아이들이 방법을 그릴 호출합니다.
제 의견에 따르면 데코레이터는 제 의견에 보편적이어야합니다. 당신이 준 의견에 따르면 그것이 종속적 인 것처럼 보입니다. 나는 그룹이 기본적으로 정렬에 의존한다는 것을 의미합니까? 만약 객체를 회전시키는 데코레이터를 만들었거나 좌표 x를 y로 바꾼다면 어떻게 될까요? 왼쪽, 오른쪽 또는 중앙 정렬에 관한 것이 아니라 장식 자에게 코드를 너무 많이 적용하지 않고 작업하는 데 대한 것입니다.
그리기 프로세스가 어떻게 작동하는지 설명해 주시겠습니까? 나는 직사각형의 그룹이 어떻게 만들어 지는지에 대한 아이디어를 가지고 있습니다. 그러나 그림이 어떻게 작동 하는지를 알지 못했을 때, 그림 장식이이 그림에 어떻게 들어 맞는지 나는 알지 못합니다. – user1201210
잘. 그룹 jus는 자신이 가지고있는 모든 사각형에서 페인트를 호출합니다. 각 직사각형에는 자체 좌표가 있으며 페인트 방법에 따라 사각형이 그래픽 G 변수에 그려지며 그래픽 G 변수는 해당 그룹에서 매개 변수로 제공됩니다. 기본적으로 내 데코레이터는 사각형을 래핑합니다. 그룹은 사각형에 대한 좌표가 변하도록 장식자를 호출합니다. 데코레이터는 래핑 된 사각형에 paint 메소드를 호출하고 정렬됩니다. 데코레이터는 직사각형에 이전 좌표를 반환합니다. –
@Dynguss 태그를 추가하는 것을 잊어 버렸습니다. 위의 내 코멘트를 참조하십시오. –