>  기사  >  Java  >  디자인 패턴 주제의 조합 모드 설명

디자인 패턴 주제의 조합 모드 설명

巴扎黑
巴扎黑원래의
2017-07-18 18:17:091083검색

정의(바이두 백과사전):
객체를 트리 구조로 결합하여 "부분-전체"의 계층 구조를 나타냅니다. 구성 패턴을 통해 사용자는 단일 개체와 복합 개체를 일관되게 사용할 수 있습니다.

UML 클래스 다이어그램:

특정 코드:

public class Client {public static void main(String[] args) throws UnmarshalException {
        Component root = new Composite();

        Component c1 = new Composite();
        Component c2 = new Composite();

        Component leaf1 = new Leaf();
        Component leaf2 = new Leaf();
        Component leaf3 = new Leaf();

        root.add(c1);
        root.add(c2);
        root.add(leaf1);
        root.add(leaf2);
        root.add(leaf3);

        Component o = root.get(0);
        o.operation();
        Component o1 = root.get(1);
        o1.operation();
        Component o2 = root.get(2);
        o2.operation();
    }
}public abstract class Component {abstract void operation();void add(Component c) throws UnmarshalException {         throw new UnmarshalException("不支持");
    }void remove(Component c) throws UnmarshalException {throw new UnmarshalException("不支持");
    }
    Component get(int index) throws UnmarshalException {throw new UnmarshalException("不支持");
    }
}public class Composite extends Component {

    List<Component> list = null;
    @Overridevoid operation() {
        System.out.println("Composite");         if (!CollectionUtil.isEmpty(list)) {             for (Component c : list) {
                c.operation();
             }
         }
    }

    @Overridevoid add(Component c) throws UnmarshalException {if (CollectionUtil.isEmpty(list)) {
            list = new ArrayList<>();
        }
        list.add(c);
    }

    @Overridevoid remove(Component c) throws UnmarshalException {if (!CollectionUtil.isEmpty(list)) {
             list.remove(c);
        }
    }

    @Override
    Component get(int index) throws UnmarshalException {if (!CollectionUtil.isEmpty(list)) {             return list.get(index);
        }return null;
    }
}public class Leaf extends Component {
    @Overridevoid operation() {
        System.out.println("叶子节点操作");
    }
}

모듈 설명:

Component(추상 구성 요소):
Component는 조합 객체는 적절한 경우 모든 클래스에 공통된 인터페이스의 기본 동작을 구현하는 추상 클래스를 선언합니다. 구성 요소 하위 구성 요소에 액세스하고 관리하는 데 사용됩니다.
Composite(컨테이너 구성 요소):
하위 구성 요소를 저장하는 데 사용되는 분기 노드 동작을 정의하고 추가(추가) 및 삭제(제거) 등 구성 요소 인터페이스의 하위 구성 요소와 관련된 작업을 구현합니다.
Leaf( 리프 구성 요소):
리프는 조합의 리프 노드 개체를 나타냅니다. 리프 노드에는 하위 노드가 없습니다. 구체적인 예:

뉴스 클라이언트, 메뉴 분류, 부서 조직 분류, 회사 부서 분류 등을 예로 들어 보겠습니다.

응용 시나리오:

트리의 모든 노드를 균일하게 작동하고 삭제 및 획득 등을 추가할 수 있는 트리 구조를 설명합니다.
장점과 단점:

장점: 기본 개체와 복합 개체의 계층 구조를 포함합니다.클라이언트 호출을 단순화하고 구성과 하위 리프를 구별할 필요가 없습니다.
확장성을 높이기 위해 자엽을 추가할 수 있습니다.

단점:
보안과 투명성은 양립할 수 없는 모순입니다. 물론 이 모드는 더 많은 투명성을 구현하고 자엽과 구성 요소를 동일하게 처리하므로 상대적인 자엽과 복합 개체를 별도로 처리하기가 매우 어려워지며 유형 변환이 필요하므로 보안에 분명히 영향을 미칩니다.

또한 비즈니스가 점점 더 복잡해짐에 따라 컴포넌트 추상화도 큰 과제가 되었습니다.



요약: 자엽과 결합체의 작동을 통일했습니다.

위 내용은 디자인 패턴 주제의 조합 모드 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.