"디자인 모드"(외관 모드/외관 모드)

외관 모드는 외관 모드라고도 합니다.

1. 외모 모드란 무엇인가요?

Facade 패턴은 서브시스템의 인터페이스 그룹에 액세스하기 위해 클라이언트에 통합 인터페이스를 제공합니다. 모양 모드를 사용하면 다음과 같은 이점이 있습니다.

(1) 사용하기 쉬움: 서브시스템을 더 쉽게 사용할 수 있습니다. 클라이언트는 더 이상 서브시스템의 내부 구현을 이해할 필요가 없고 서브시스템의 많은 내부 모듈과 상호작용할 필요도 없습니다. 외모등급;

(2) 느슨한 결합: 클라이언트를 하위 시스템에서 분리하여 하위 시스템 내에서 모듈을 더 쉽게 확장하고 유지 관리할 수 있습니다.

(3) 액세스 수준의 더 나은 분할: Facade의 합리적인 사용을 통해 액세스 수준을 더 효과적으로 분할할 수 있습니다. 일부 방법은 시스템 외부에서 사용되며 일부 방법은 시스템 내부에서 사용됩니다. 외부에 노출되어야 하는 기능을 파사드에 집중시켜 클라이언트가 사용하기 편리할 뿐만 아니라 내부 디테일도 잘 숨깁니다.

그러나 Appearance 패턴이 하위 시스템 클래스에 너무 많은 제한을 가하면 가변성과 유연성이 감소하므로 복잡한 하위 시스템에 대한 간단한 인터페이스 제공, 시스템의 사용성 향상 및 Appearance 도입에 적합합니다. 하위 시스템의 패턴을 클라이언트에서 분리하여 하위 시스템의 독립성과 이식성을 향상시킵니다.

위 그림에서 볼 수 있듯이 Appearance 모드가 도입된 후 하위 시스템의 사용이 더 간단해집니다. 고객은 Facede 모양 역할만 처리하면 됩니다. 하위 시스템 간의 복잡한 관계는 Facede 역할에 의해 실현되므로 하위 시스템의 결합이 줄어듭니다. 체계. Facade 클래스가 없으면 하위 시스템은 서로에 대한 참조를 유지하므로 심각한 종속성이 발생합니다. 하나의 클래스를 수정하면 다른 클래스의 체인 수정으로 이어질 수 있지만 Facade 클래스의 경우 이들 간의 관계는 Facade 클래스에 배치됩니다. , 디커플링 역할을 합니다. 

2. UML 구조 다이어그램

  • Facade Facade 역할: 클라이언트는 관련 하위 시스템의 기능을 알고 있는 이 역할의 메서드를 호출할 수 있습니다. 일반적인 상황에서 이 역할은 클라이언트에서 보낸 모든 요청을 해당 하위 시스템에 위임합니다.
  • 하위 시스템 하위 시스템 역할: 동시에 하나 이상의 하위 시스템이 있을 수 있습니다. 각 하위 시스템은 별도의 클래스가 아니라 클래스 모음입니다(예를 들어 위 하위 시스템은 SubSystemA, SubSystemB, SubSystemC 및 SubSystemD 등 여러 클래스로 구성됩니다). 각 하위 시스템은 클라이언트 또는 Facade 역할에 의해 직접 호출될 수 있습니다. 서브시스템은 Facade의 존재를 알지 못하며 서브시스템의 경우 Facade의 역할은 또 다른 클라이언트일 뿐입니다.

 

3. 코드 구현

컴퓨터의 시작 프로세스를 예로 들어보겠습니다.

먼저 구현 클래스를 살펴보겠습니다.

public class CPU {
	
	public void startup(){
		System.out.println("cpu startup!");
	}
	
	public void shutdown(){
		System.out.println("cpu shutdown!");
	}
}
public class Memory {
	
	public void startup(){
		System.out.println("memory startup!");
	}
	
	public void shutdown(){
		System.out.println("memory shutdown!");
	}
}
public class Disk {
	
	public void startup(){
		System.out.println("disk startup!");
	}
	
	public void shutdown(){
		System.out.println("disk shutdown!");
	}
}
//Facade类
public class Computer {
	private CPU cpu;
	private Memory memory;
	private Disk disk;
	
	public Computer(){
		cpu = new CPU();
		memory = new Memory();
		disk = new Disk();
	}
	
	public void startup(){
		System.out.println("start the computer!");
		cpu.startup();
		memory.startup();
		disk.startup();
		System.out.println("start computer finished!");
	}
	
	public void shutdown(){
		System.out.println("begin to close the computer!");
		cpu.shutdown();
		memory.shutdown();
		disk.shutdown();
		System.out.println("computer closed!");
	}
}

사용자 클래스는 다음과 같습니다.

public class User {
 
	public static void main(String[] args) {
		Computer computer = new Computer();
		computer.startup();
		computer.shutdown();
	}
}

작업 결과:

컴퓨터를 시작해!
CPU 시동!
메모리 스타트!
디스크 시동!
컴퓨터 시작 완료!
컴퓨터를 닫기 시작하세요!
CPU 종료!
메모리 종료!
디스크 종료!
컴퓨터가 닫혔어요!

Facade 클래스는 실제로 CPU, 디스크 및 메모리 모듈의 외관 인터페이스와 동일합니다. 이 Facade 클래스를 사용하면 클라이언트가 서브시스템의 CPU, 디스크 및 메모리 모듈을 직접 호출할 필요가 없으며 호출할 필요도 없습니다. 시스템의 내부 구현 세부 사항을 알아야 합니다. CPU, 디스크 및 메모리 모듈의 존재도 알 필요가 없습니다. 클라이언트는 Facade 클래스와만 상호 작용하면 되므로 CPU의 디커플링을 더 잘 실현할 수 있습니다. 클라이언트 및 하위 시스템의 디스크 및 메모리 모듈을 통해 고객이 시스템을 보다 쉽게 ​​사용할 수 있습니다.

4. 기타 문제

1. 시스템은 몇 개의 모양 클래스를 가질 수 있습니까?

모양 패턴에는 일반적으로 하나의 모양 클래스만 필요하며 이 모양 클래스에는 싱글톤 클래스인 인스턴스가 하나만 있습니다. 그러나 이는 전체 시스템에 하나의 모양 클래스만 있다는 의미가 아니라 각 하위 시스템에 하나의 모양 클래스만 있다는 의미입니다. 즉, 시스템에 여러 하위 시스템이 있는 경우 각 하위 시스템에는 모양 클래스가 있고 전체 시스템에는 여러 모양 클래스가 있을 수 있습니다.

2. 하위 시스템에 새로운 동작을 추가할 수 있습니까?

모양 패턴의 목적은 하위 시스템에 중앙 집중화되고 단순화된 통신 채널을 제공하는 것이지만 하위 시스템에 새로운 동작을 추가하는 것은 아닙니다. 예를 들어, 병원의 접수원은 의료진이 아니며, 접수원은 환자에게 의료 서비스를 제공할 수 없습니다.

Supongo que te gusta

Origin blog.csdn.net/m0_50370837/article/details/126248772
Recomendado
Clasificación