Latest web development tutorials

결합 모드

또한, 전체 패턴의 일부로서 공지의 결합 모드 (컴포지트 패턴)는 단일 개체로서 유사한 객체들의 그룹이다. 부분과 전체 레벨을 나타내는 객체를 결합하는 트리 구조에 기초하여 조합 패턴. 디자인 패턴이 타입은 대상 그룹의 트리 구조를 생성, 구조 모델에 속한다.

이 패턴은 클래스 객체 자체의 그룹을 포함 만들었다. 이 클래스는 동일한 객체 그룹을 수정하는 방법을 제공한다.

하기 실시 예에 의해 우리는 모드의 조합의 사용을 입증한다. 예를 들면 조직에서 직원의 계층 구조를 보여줍니다.

소개

의도 : "부분 - 전체"표현하기 위해 트리 구조로 개체를 작성 계층 구조를.결합 모드 균일 개체의 단일 객체 및 조성물을 사용을 가능하게한다.

주로 해결하기 위해 : 그것은 간단 요소와 복잡한 요소의 개념을 모호하게, 우리 나무의 문제입니다, 복잡한 요소를 처리하는 단순 요소를 처리 할 수있는 클라이언트 있도록 클라이언트와 복잡한 요소의 디커플링의 내부 구조.

때 사용하는 방법 : 1, 당신이 부분을 대표 할 개체 - 전체 계층 구조 (트리).2, 당신은 다른 사용자가 사용자는 모든 개체에 대한 통합 된 구조를 결합되며, 하나의 개체와 개체의 조합을 무시해야합니다.

해결 방법 : 나뭇 가지와 나뭇잎이 통합 된 인터페이스를 달성하기 위해, 인터페이스는 내부 가지의 조합입니다.

키 코드 : 인터페이스의 목재 내부 조성물 및 구성 요소를 넣어 내부 속성 목록이 포함되어 있습니다.

적용 예 : 1, 다른 운영자 나무 작업, 연산자 및 다른 피연산자 수 있습니다 피연산자, 연산자 및 다른 피연산자를 포함하여 산술 표현식.2, 자바 AWT 및 버튼에 대한 SWING 및 확인란 잎, 컨테이너 나뭇 가지입니다.

장점 : (1)는 높은 수준의 모듈은 간단한 부른다.2, 노드는 자유 증가했다.

단점 : 조합 모드를 사용하는 경우, 그것의 잎과 가지가 의존 관계 역전 원칙을 위반하는 대신 인터페이스로, 클래스 선언을 구현하고 있습니다.

이러한 트리 메뉴, 파일, 폴더 관리 등의 부분, 전체 장면: 사용 시나리오.

참고 : 특정 카테고리를 정의 할 때.

실현

우리는 클래스 모델 클래스의 조합으로처리하여,클래스직원이있다.CompositePatternDemo, 우리는 부서 계층 및 인쇄 모든 직원을 추가하는 클래스Employee클래스의 사용을 보여줍니다.

조합 패턴 UML 다이어그램

1 단계

Employee클래스,직원 개체의목록과 클래스를 만듭니다.

Employee.java

수입 인 java.util.ArrayList;
가져 오기를 java.util.List;

공용 클래스 사원 {
   개인 문자열 이름;
   개인 문자열 부서;
   개인 INT 급여;
   개인 목록 <직원> 부하 직원;

   // 생성자 공무원 (문자열 이름, 문자열 부서, INT의 샐) {
      this.name = 이름;
      this.dept = 부서;
      this.salary = 샐;
      부하 직원 = 새로운 ArrayList를 <직원> ();
   }

   공공 무효의 추가 (직원 전자) {
      subordinates.add (E);
   }

   공공 무효 삭제 (직원 전자) {
      subordinates.remove (E);
   }

   공개 목록 <직원> getSubordinates () {
     부하 직원을 반환;
   }

   공공 문자열 toString () {
      ( "직원을 : [이름 :"반환 + 이름 
      + ",학과 :"+ 부서 + "급여"
      연봉 + + "]");
   }   
}

2 단계

작성하고 직원의 계층 구조를 인쇄하는Employee클래스를 사용합니다.

CompositePatternDemo.java

공용 클래스 CompositePatternDemo {
   공공 정적 무효 메인 (문자열 []에 args) {
      직원 CEO = 새로운 직원 ( "존", "CEO", 30000);

      직원 headSales = 새로운 직원 ( "로버트", "머리 판매", 20000);

      직원 headMarketing = 새로운 직원 ( "미셸", "머리 마케팅", 20000);

      직원 clerk1 = 새로운 직원 ( "라", "마케팅", 10000);
      직원 clerk2 = 새로운 직원 ( "밥", "마케팅", 10000);

      직원 salesExecutive1 = 새로운 직원 ( "리처드", "판매", 10000);
      직원 salesExecutive2 = 새로운 직원 ( "롭", "판매", 10000);

      CEO.add (headSales);
      CEO.add (headMarketing);

      headSales.add (salesExecutive1);
      headSales.add (salesExecutive2);

      headMarketing.add (clerk1);
      headMarketing.add (clerk2);

      // 인쇄 모든 조직의 직원에서 System.out.println (CEO); 
      {(CEO.getSubordinates () 직원 headEmployee)에 대한
         에서 System.out.println (headEmployee);
         대한 (직원 직원 : headEmployee.getSubordinates ()) {
            에서 System.out.println (직원);
         }
      }		
   }
}

3 단계

출력을 확인합니다.

직원 : 이름 : 존, 부서 : CEO, 급여 : 30000]
직원 : 이름 : 로버트, 부서 : 헤드 판매, 급여 : 20000]
직원 : 이름 : 리처드 부서 : 판매, 급여 : 10000]
직원 : 이름 : 롭, 부서 : 판매, 급여 : 10000]
직원 : 이름 : 미셸, 부서 : 헤드 마케팅, 급여 : 20000]
직원 : 이름 : 로라, 부서 : 마케팅, 급여 : 10000]
직원 : 이름 : 밥, 부서 : 마케팅, 급여 : 10000]