외관 모드 [C \ #]
정의.
서브 시스템 의 인터페이스 에 일치 하 는 인 터 페 이 스 를 제공 합 니 다. 외관 모델 은 고 층 인 터 페 이 스 를 정의 합 니 다. 이 인 터 페 이 스 는 이 서브 시스템 을 더욱 쉽게 사용 할 수 있 습 니 다.
한 마디 로 하면 외관 모델 은 클 라 이언 트 로 하여 금 각 서브 시스템 간 의 상호작용 논리 에 관심 을 가지 지 않 고 '외관 역할' 을 맡 는 인터페이스 가 어느 것 인지 만 알 면 된다.
구조 지도 (류 웨 이 선생님 의 블 로그)
코드
장면 1
어느 토요일 정오 가 다가 오자 샤 오 밍 은 배가 고 팠 다!그 는 배 를 채 우기 위해 침대 에서 일어나 밥 을 준비 할 수 밖 에 없 었 다.이것 은 결코 쉬 운 일이 아니 라 는 것 을 알 아야 한다!어쨌든 스스로 밥 을 하려 면 먼저 채소 시장 에 가서 채 소 를 사고 채 소 를 씻 은 후에 야 요 리 를 할 수 있다.적어도 한 시간 은 고생 해 야 밥 을 먹 을 수 있다!비록 매우 내 키 지 않 지만, 다른 선택의 여지 가 없다!
class BuyVegetables
{
///
///
///
public static void Buy()
{
Console.WriteLine(" 。");
}
}
class Cleanout
{
///
///
///
public static void Clean()
{
Console.WriteLine(" 。");
}
}
class Cooking
{
///
///
///
public static void Cook()
{
Console.WriteLine(" 。");
}
}
바 쁠 일이 다 끝 났 으 니 밥 을 먹 어도 된다!
class Program
{
static void Main(string[] args)
{
Console.WriteLine(" ···");
BuyVegetables.Buy();
Cleanout.Clean();
Cooking.Cook();
Console.WriteLine(" 。");
}
}
이 식 사 는 정말 샤 오 밍 을 비참 하 게 만 들 었 다!!!
장면 2
일주일 이 지 났 어 요.
또 토요일, 또 점심 시간 이 다가 오자 샤 오 밍 은 또 배가 고 팠 습 니 다..............................................................................
하지만 배달 을 주문 하려 면 식당 연락처 가 먼저 있어 야 한다.이것
은 사실 외관 자의 논리 적 입구 가 되 었 다.class Restaurant
{
///
///
///
public static void Order()
{
Console.WriteLine(" , ···");
BuyVegetables.Buy();
Cleanout.Clean();
Cooking.Cook();
Console.WriteLine(" , ···");
}
}
식당 의 연락처 가 생기 면 간단 해진 다.
class Program
{
static void Main(string[] args)
{
Console.WriteLine(" , ···");
Restaurant.Order();
Console.WriteLine(" , !");
Console.WriteLine(" , ···");
}
}
이번 엔 편 해.
총결산
장면 1 에서 고객 (샤 오 밍) 과 밥 을 먹 는 이 일의 상호작용 이 상당히 번 거 로 워 서 전체 절 차 를 그 가 스스로 하려 면 많은 신경 을 써 야 한다!실제 작업 에서 이런 장면 은 매우 흔히 볼 수 있다. 매번 서브 시스템 의 논 리 를 클 라 이언 트 에 결합 하면 클 라 이언 트 는 상당히 비대 하고 불안정 해 질 것 이다.이때 중간 부품 (외관 자), 즉 장면 2 의 '식당' 을 제공 합 니 다. 그러면 샤 오 밍 은 전화 한 통, 장 보기, 채 소 를 씻 기, 요 리 를 하 는 일 을 모두 누군가가 해결 해 주 었 습 니 다.실제 업무 에서 도 하나의 외관 자 를 제공 하여 각 서브 시스템 (또는 서브 기능) 과 의 상호작용 을 책임 질 수 있다.이 외관 자 는 클 라 이언 트 에 게 입구 방법 을 제공 합 니 다. 클 라 이언 트 는 이 입구 방법 만 호출 하면 하고 싶 은 모든 일 을 처리 할 수 있 습 니 다. 그러면 클 라 이언 트 의 복잡 도 를 줄 일 수 있 습 니 다.
보충 토론
어느 날 샤 오 밍 이 라면 라면 을 대충 시 켰 을 뿐 이 라면 식당 은 채 소 를 씻 지 않 고 국 수 를 사서 샤 오 밍 에 게 보 내 면 된다.그럼 어 떡 하지?외관 자의 코드 를 바 꾸 고 안에 있 는
Cleanout.Clean();
코드 를 지 워 야 합 니까?이것 이 어찌 개폐 원칙 을 위반 한 것 이 아니 겠 는가?예, 이렇게 처리 하면 반드시 개폐 원칙 을 위반 할 것 입 니 다!어 떡 하지?이때 외관 자 캐릭터 를 추상 화 할 수 있다!
interface IRestaurant
{
///
///
///
void Order();
}
그리고 구체 적 인 외관 자 - 국수집 을 실현 합 니 다.
class NoodleRestaurant : IRestaurant
{
public void Order()
{
Console.WriteLine(" , ···");
BuyVegetables.Buy();
Cooking.Cook();
Console.WriteLine(" , ···");
}
}
이렇게 해서 샤 오 밍 은 면 을 먹고 싶 을 때
new NoodleRestaurant().Order()
를 사용 하면 성공 적 으로 주문 할 수 있다!이상
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.