되어 외관 다른 클래스를 많이 포함하는 클래스를?
디자인 패턴은 무엇입니까? 나에게는 일반 수업과 같습니다.
이 Facade 패턴 을 설명해 주 시겠습니까?
답변
디자인 패턴은 반복되는 문제를 해결하는 일반적인 방법입니다. 모든 디자인 패턴의 클래스는 단순한 클래스입니다. 중요한 것은 그들이 어떻게 구성되고 주어진 문제를 가능한 최선의 방법으로 해결하기 위해 협력하는 방법입니다.
외관 디자인 패턴은 복잡한 시스템의 인터페이스를 단순화; 보통 복잡한 시스템의 서브 시스템을 구성하는 모든 클래스로 구성되어 있기 때문입니다.
Facade는 시스템의 복잡한 세부 사항으로부터 사용자를 보호하고 그 중 하나 simplified view
를 제공합니다 easy to use
. 또한 decouples
서브 시스템의 세부 사항에서 시스템을 사용하는 코드이므로 나중에 시스템을 쉽게 수정할 수 있습니다.
http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
또한 디자인 패턴을 배우는 동안 중요한 것은 주어진 패턴에 맞는 패턴을 인식하고 적절하게 사용하는 것입니다. 패턴을 잘못 사용하거나 알고 있기 때문에 어떤 문제에 맞추려고하는 것은 매우 일반적인 일입니다. 디자인 패턴을 배우거나 사용하는 동안 이러한 함정에주의하십시오.
답변
Wikipedia 에는 Facade 패턴의 좋은 예가 있습니다.
/* Complex parts */
class CPU {
public void freeze() { ... }
public void jump(long position) { ... }
public void execute() { ... }
}
class Memory {
public void load(long position, byte[] data) { ... }
}
class HardDrive {
public byte[] read(long lba, int size) { ... }
}
/* Facade */
class ComputerFacade {
private CPU processor;
private Memory ram;
private HardDrive hd;
public ComputerFacade() {
this.processor = new CPU();
this.ram = new Memory();
this.hd = new HardDrive();
}
public void start() {
processor.freeze();
ram.load(BOOT_ADDRESS, hd.read(BOOT_SECTOR, SECTOR_SIZE));
processor.jump(BOOT_ADDRESS);
processor.execute();
}
}
/* Client */
class You {
public static void main(String[] args) {
ComputerFacade computer = new ComputerFacade();
computer.start();
}
}
답변
이전 답변에서 설명했듯이 소비 클라이언트에게 간단한 인터페이스를 제공합니다. 예를 들어 “watch ESPN”은 의도 된 기능입니다. 그러나 다음과 같은 여러 단계가 포함됩니다.
- 필요한 경우 TV를 켜십시오.
- 위성 / 케이블 기능을 점검하십시오.
- 필요한 경우 ESPN으로 전환하십시오.
그러나 파사드는이를 단순화하고 클라이언트에게 “watch ESPN”기능을 제공합니다.
답변
Facade는 시스템의 복잡성을 숨기고 클라이언트가 시스템에 액세스 할 수있는 클라이언트에 대한 인터페이스를 제공합니다.
public class Inventory {
public String checkInventory(String OrderId) {
return "Inventory checked";
}
}
public class Payment {
public String deductPayment(String orderID) {
return "Payment deducted successfully";
}
}
public class OrderFacade {
private Payment pymt = new Payment();
private Inventory inventry = new Inventory();
public void placeOrder(String orderId) {
String step1 = inventry.checkInventory(orderId);
String step2 = pymt.deductPayment(orderId);
System.out
.println("Following steps completed:" + step1
+ " & " + step2);
}
}
public class Client {
public static void main(String args[]){
OrderFacade orderFacade = new OrderFacade();
orderFacade.placeOrder("OR123456");
System.out.println("Order processing completed");
}
}
답변
짧고 간단한 설명 :
- Facade 패턴은 서브 시스템의 인터페이스 세트에 대한 통합 인터페이스를 제공합니다.
- Facade는 서브 시스템을보다 쉽게 사용할 수있는 상위 레벨 인터페이스를 정의합니다.
Façade의 유무에 관계없이 시나리오를 이해하십시오
. 돈을 accout1에서 account2로 송금하려면 호출 할 두 서브 시스템은 account1에서 인출하고 account2로 입금됩니다.
답변
정면은 많은 다른 클래스를 포함하는 클래스로 설명되어서는 안됩니다. 실제로이 클래스에 대한 인터페이스이며 클래스 사용을 더 쉽게해야합니다. 그렇지 않으면 파사드 클래스가 쓸모가 없습니다.
답변
귀하의 질문에 관하여 :
Facade는 다른 많은 클래스를 포함하는 클래스입니까?
예. 응용 프로그램의 많은 하위 시스템에 대한 래퍼입니다.
디자인 패턴은 무엇입니까? 나를 위해, 그것은 일반 수업과 같습니다
모든 디자인 패턴도 일반 클래스입니다. @ Unmesh Kondolikar 는이 질문에 올바르게 대답했습니다.
이 외관에 대해 설명해 주시겠습니까? 저는 패턴을 처음 사용합니다.
GoF에 따르면 Facade 디자인 패턴은 다음과 같이 정의됩니다.
서브 시스템의 인터페이스 세트에 통합 인터페이스를 제공하십시오. Facade Pattern은 서브 시스템을보다 쉽게 사용할 수있게 해주는 상위 인터페이스를 정의합니다.
외관 패턴은 일반적으로 때 사용된다 :
- 복잡한 시스템에 액세스하려면 간단한 인터페이스가 필요합니다.
- 서브 시스템의 추상화와 구현은 밀접하게 연결되어 있습니다.
- 각 계층 소프트웨어 레벨의 진입 점이 필요합니다.
- 시스템은 매우 복잡하거나 이해하기 어렵습니다.
cleartrip 웹 사이트 의 실제 예를 들어 봅시다 .
이 웹 사이트는 예약 옵션을 제공합니다
- 항공편
- 호텔
- 항공편 + 호텔
코드 스 니펫 :
import java.util.*;
public class TravelFacade{
FlightBooking flightBooking;
TrainBooking trainBooking;
HotelBooking hotelBooking;
enum BookingType {
Flight,Train,Hotel,Flight_And_Hotel,Train_And_Hotel;
};
public TravelFacade(){
flightBooking = new FlightBooking();
trainBooking = new TrainBooking();
hotelBooking = new HotelBooking();
}
public void book(BookingType type, BookingInfo info){
switch(type){
case Flight:
// book flight;
flightBooking.bookFlight(info);
return;
case Hotel:
// book hotel;
hotelBooking.bookHotel(info);
return;
case Train:
// book Train;
trainBooking.bookTrain(info);
return;
case Flight_And_Hotel:
// book Flight and Hotel
flightBooking.bookFlight(info);
hotelBooking.bookHotel(info);
return;
case Train_And_Hotel:
// book Train and Hotel
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
return;
}
}
}
class BookingInfo{
String source;
String destination;
Date fromDate;
Date toDate;
List<PersonInfo> list;
}
class PersonInfo{
String name;
int age;
Address address;
}
class Address{
}
class FlightBooking{
public FlightBooking(){
}
public void bookFlight(BookingInfo info){
}
}
class HotelBooking{
public HotelBooking(){
}
public void bookHotel(BookingInfo info){
}
}
class TrainBooking{
public TrainBooking(){
}
public void bookTrain(BookingInfo info){
}
}
설명:
-
FlightBooking, TrainBooking and HotelBooking
큰 시스템의 다른 하위 시스템입니다.TravelFacade
-
TravelFacade
아래 옵션 중 하나를 예약 할 수있는 간단한 인터페이스 제공Flight Booking Train Booking Hotel Booking Flight + Hotel booking Train + Hotel booking
-
TravelFacade의 API 예약은 내부적으로 하위 시스템의 API를 호출합니다.
flightBooking.bookFlight trainBooking.bookTrain(info); hotelBooking.bookHotel(info);
-
이런 식으로,
TravelFacade
서브 시스템 API를 노출하지 않고도 더 간단하고 쉬운 API를 제공합니다.
주요 내용 : ( pankaj Kumar의 journaldev 기사 에서 )
- 외관 패턴은 클라이언트 응용 프로그램 의 도우미 와 비슷 합니다.
- 외관 패턴은 개발 시점에 적용 할 수 있으며, 일반적으로 인터페이스 수가 늘어나고 시스템이 완성 될 때 x .
- 서브 시스템 인터페이스는 Facade를 인식 하지 않으며 Facade 인터페이스에 대한 참조가 없어야합니다.
- 외관 패턴은 유사한 종류의 인터페이스에 적용되어야하며 , 그 목적은 유사한 종류의 작업을 수행하는 여러 인터페이스가 아닌 단일 인터페이스를 제공하는 것입니다.
더 나은 이해를 위해 소스 제작 기사도 살펴보십시오 .