Java 디자인 모드 -- 콤보 모드(Composit)

1. 조합 모드 정의:
조합 모델은 합성 모델이라고도 부르고 때로는 부분-전체 모델이라고도 부르는데 주로 부분과 전체의 관계를 묘사하는 데 쓰인다.
정의: 객체를 트리 구조로 그룹화하여 "부분-전체"의 계층 구조를 보여줌으로써 단일 객체에 대한 사용자 사용의 일관성을 유지합니다.
2. 조합 모드의 3개 객체:
a. Component 추상 위젯 역할
조합 대상에 참가하는 공유된 속성과 방법을 정의하고 기본적인 행위나 속성을 정의할 수 있습니다
b. Leaf 리프 위젯
잎사귀 의 대상 은 그 아래 에 더 이상 분지 가 없더라도, 두루 다니는 가장 작은 단위 이다
c. Composit 나뭇가지 부재
나뭇가지 대상, 작용은 나뭇가지 부재와 나뭇잎 부재를 조합하여 나무 구조를 형성하는 것이다
3. 조합 모드 일반 예제 코드:
Component 클래스:
public abstract class Component {
  
	//           
	public void  doSomething(){
		System.out.println("     ...");
	}
}
NewLeaf 잎 위젯 클래스:
public class NewLeaf extends Component {
   
	@Override
	public void doSomething() {
		super.doSomething();
		System.out.println("       .");
	}
}
Composit 나뭇가지 부재 클래스
public class Composit extends Component {
    
	//    
	private ArrayList<Component> list=new ArrayList<Component>();
	
	//             
	public void  add(Component com){
		this.list.add(com);
	}
	
	//    
	public void  remove(Component com){
		this.list.remove(com);
	}
	
	//                   
	public ArrayList<Component> getChildren(){
		return this.list;
	}
}
테스트 코드:
public class Test {
   public static void main(String[] args) {
	//     
	Composit root=new Composit();
	root.doSomething();
	
	//        
	Composit branch=new Composit();
	//        
	NewLeaf leaf=new NewLeaf();
	
	root.add(branch);
	branch.add(leaf);
	
	display(root);
   }
   
   public static void display(Composit root){
	   for (Component it : root.getChildren()) {
			if(it instanceof NewLeaf){
				it.doSomething();
			}else{
				display((Composit)it);
			}
	   }
   }
}
4. 조합 모드의 이점:
a. 고층 모듈 호출 간단
한 그루의 나무의 모든 노드는Component로 부분과 전체는 호출자에게 차이가 없다. 즉, 고위층은 하나의 대상을 처리하는지 조합 구조를 처리하는지 신경 쓰지 않고 고위층 모듈의 코드를 간소화했다.
b. 노드 자유 증가
나뭇가지 노드나 나뭇잎 노드를 늘리려면 아버지 노드를 찾으면 된다.매우 쉽게 확장되고 개폐 원칙에 부합된다.
5. 조합 모드의 단점:
테스트 클래스에서 알 수 있듯이 나뭇잎과 나뭇가지의 정의를 사용할 때 실현 클래스를 직접 사용했고 인터페이스가 아니라 의존 역치 원칙과 충돌했다!
6. 조합 모드의 사용 장면:
a. 유지 관리 섹션 - 트리 메뉴, 파일 및 폴더 처리와 같은 관계식의 전체 장면
b. 하나의 전체에서 일부 모듈과 기능을 독립할 수 있는 장면

좋은 웹페이지 즐겨찾기