Mặt tiền có phải là một lớp chứa rất nhiều lớp khác không?
Điều gì làm cho nó một mô hình thiết kế? Đối với tôi, nó giống như một lớp học bình thường.
Bạn có thể giải thích cho tôi mẫu mặt tiền này ?
Mặt tiền có phải là một lớp chứa rất nhiều lớp khác không?
Điều gì làm cho nó một mô hình thiết kế? Đối với tôi, nó giống như một lớp học bình thường.
Bạn có thể giải thích cho tôi mẫu mặt tiền này ?
Câu trả lời:
Một mẫu thiết kế là một cách phổ biến để giải quyết vấn đề định kỳ. Các lớp trong tất cả các mẫu thiết kế chỉ là các lớp bình thường. Điều quan trọng là cách chúng được cấu trúc và cách chúng làm việc cùng nhau để giải quyết một vấn đề nhất định theo cách tốt nhất có thể.
Mẫu thiết kế Facade đơn giản hóa giao diện thành một hệ thống phức tạp; bởi vì nó thường bao gồm tất cả các lớp tạo nên các hệ thống con của hệ thống phức tạp.
Mặt tiền che chắn người dùng khỏi các chi tiết phức tạp của hệ thống và cung cấp cho họ một simplified view
trong số đó là easy to use
. Nó cũng decouples
là mã sử dụng hệ thống từ các chi tiết của các hệ thống con, giúp việc sửa đổi hệ thống sau này dễ dàng hơn.
http://www.dofactory.com/Potypes/PotypeFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
Ngoài ra, điều quan trọng trong khi học các mẫu thiết kế là có thể nhận ra mẫu nào phù hợp với vấn đề nhất định của bạn và sau đó sử dụng nó một cách thích hợp. Đó là một điều rất phổ biến để sử dụng sai một mô hình hoặc cố gắng phù hợp với một số vấn đề chỉ vì bạn biết nó. Hãy nhận biết những cạm bẫy trong khi học \ sử dụng các mẫu thiết kế.
Wikipedia có một ví dụ tuyệt vời về mẫu Mặt tiền.
/* 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();
}
}
Như đã giải thích trong câu trả lời trước, nó cung cấp một giao diện đơn giản cho khách hàng tiêu thụ. Ví dụ: "xem ESPN" là chức năng dự định. Nhưng nó bao gồm một số bước như:
Nhưng mặt tiền sẽ đơn giản hóa điều này và chỉ cung cấp chức năng "xem ESPN" cho khách hàng.
Facade che giấu sự phức tạp của hệ thống và cung cấp giao diện cho khách hàng từ nơi khách hàng có thể truy cập hệ thống.
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");
}
}
OrderFacade
không? Trong ví dụ của bạn, giữa Payment
và Inventory
?
Một lời giải thích ngắn gọn và đơn giản:
Cố gắng hiểu kịch bản có và không có Façade:
Nếu bạn muốn chuyển tiền từ accout1 sang tài khoản2 thì hai hệ thống con sẽ được gọi là, rút tiền từ tài khoản1 và gửi vào tài khoản2.
Về truy vấn của bạn:
Có phải Facade là một lớp chứa rất nhiều lớp khác?
Đúng. Nó là một trình bao bọc cho nhiều hệ thống phụ trong ứng dụng.
Điều gì làm cho nó một mô hình thiết kế? Đối với tôi, nó giống như một lớp học bình thường
Tất cả các mẫu thiết kế cũng là các lớp bình thường. @ Unmesh Kondolikar đã trả lời đúng câu hỏi này.
Bạn có thể giải thích cho tôi về Mặt tiền này, tôi chưa quen với các mẫu thiết kế.
Theo GoF, mẫu thiết kế Facade được xác định là:
Cung cấp một giao diện hợp nhất cho một tập hợp các giao diện trong một hệ thống con. Mẫu mặt tiền xác định giao diện cấp cao hơn giúp hệ thống con dễ sử dụng hơn
Mẫu mặt tiền thường được sử dụng khi:
Hãy lấy một ví dụ từ thực sự của trang web Cleartrip .
Trang web này cung cấp các tùy chọn để đặt
Đoạn mã:
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){
}
}
Giải trình:
FlightBooking, TrainBooking and HotelBooking
là các hệ thống con khác nhau của hệ thống lớn: TravelFacade
TravelFacade
cung cấp một giao diện đơn giản để đặt một trong các tùy chọn dưới đây
Flight Booking
Train Booking
Hotel Booking
Flight + Hotel booking
Train + Hotel booking
sách API từ TravelFacade gọi nội bộ bên dưới API của các hệ thống phụ
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
Theo cách này, TravelFacade
cung cấp API đơn giản và dễ dàng hơn khi không có API hệ thống phụ.
Takeaways chính: (từ journaldev bài viết của Pankaj Kumar )
Có một cái nhìn vào bài viết chua quá để hiểu rõ hơn.
Mẫu mặt tiền là một gói của nhiều giao diện khác trong kết quả để tạo ra một giao diện đơn giản hơn.
Các mẫu thiết kế rất hữu ích vì chúng giải quyết các vấn đề định kỳ và nói chung đơn giản hóa mã. Trong một nhóm các nhà phát triển đồng ý sử dụng các mẫu tương tự, nó cải thiện hiệu quả và sự hiểu biết khi duy trì mã của nhau.
Hãy thử đọc về nhiều mẫu hơn:
Mẫu mặt tiền: http://www.dofactory.com/Potypes/PotypeFacade.aspx#_elf1
hoặc nói chung hơn: http://www.dofactory.com/Potypes/Potypes.aspx
Một cách sử dụng bổ sung mô hình Façade có thể là để giảm thời gian học tập của nhóm của bạn. Tôi sẽ cho bạn một ví dụ:
Giả sử rằng ứng dụng của bạn cần tương tác với MS Excel bằng cách sử dụng mô hình đối tượng COM do Excel cung cấp. Một trong các thành viên trong nhóm của bạn biết tất cả các API Excel và anh ta tạo Mặt tiền trên đầu trang, đáp ứng tất cả các kịch bản cơ bản của ứng dụng. Không có thành viên nào khác trong nhóm cần dành thời gian cho việc học API Excel. Nhóm có thể sử dụng mặt tiền mà không cần biết nội bộ hoặc tất cả các đối tượng MS Excel có liên quan đến việc hoàn thành một kịch bản. Không phải nó thật tuyệt sao?
Do đó, nó cung cấp một giao diện đơn giản và thống nhất trên một hệ thống con phức tạp.
Một ví dụ khác về mặt tiền: giả sử ứng dụng của bạn kết nối với cơ sở dữ liệu và hiển thị kết quả trên giao diện người dùng. Bạn có thể sử dụng mặt tiền để làm cho ứng dụng của bạn có thể định cấu hình được, như khi chạy bằng cơ sở dữ liệu hoặc với các đối tượng giả. Vì vậy, bạn sẽ thực hiện tất cả các cuộc gọi cơ sở dữ liệu đến lớp mặt tiền, nơi nó sẽ đọc cấu hình ứng dụng và quyết định kích hoạt truy vấn db hoặc trả về đối tượng giả. cách này ứng dụng trở thành độc lập db trong trường hợp db không có sẵn.
Một mặt tiền cho thấy các chức năng đơn giản được gọi là chủ yếu và việc triển khai che giấu sự phức tạp mà khách hàng sẽ phải giải quyết. Nói chung, việc triển khai sử dụng nhiều gói, lớp và chức năng trong đó. Mặt tiền được viết tốt làm cho việc truy cập trực tiếp của các lớp khác trở nên hiếm. Ví dụ khi tôi truy cập ATM và rút một số tiền. ATM ẩn cho dù nó đang đi thẳng đến ngân hàng thuộc sở hữu hay nó sẽ đi qua một mạng được đàm phán cho một ngân hàng bên ngoài. ATM hoạt động giống như một mặt tiền tiêu thụ nhiều thiết bị và hệ thống phụ mà với tư cách là khách hàng tôi không phải đối phó trực tiếp.
Có một ví dụ thực tế rất tốt về mẫu - Động cơ khởi động xe .
Là tài xế, chúng tôi chỉ cần bật chìa khóa và xe bắt đầu. Càng đơn giản càng tốt. Đằng sau hậu trường, nhiều hệ thống xe hơi khác có liên quan (như pin, động cơ, nhiên liệu, v.v.), để chiếc xe khởi động thành công, nhưng chúng được ẩn đằng sau bộ khởi động.
Như bạn có thể thấy, người khởi động xe là Mặt tiền. Nó cho chúng ta dễ dàng sử dụng giao diện, mà không phải lo lắng về sự phức tạp của tất cả các hệ thống xe hơi khác.
Hãy tóm tắt:
Mẫu Facade đơn giản hóa và che giấu sự phức tạp của các khối mã hoặc API lớn, cung cấp giao diện sạch hơn, dễ hiểu và dễ sử dụng.
Mặt tiền là một lớp có mức chức năng nằm giữa bộ công cụ và ứng dụng hoàn chỉnh, cung cấp cách sử dụng đơn giản các lớp trong gói hoặc hệ thống con. Mục đích của mẫu Mặt tiền là cung cấp giao diện giúp hệ thống con dễ sử dụng. - Trích xuất từ cuốn sách Các mẫu thiết kế trong C #.
Facade thảo luận về việc đóng gói một hệ thống con phức tạp trong một đối tượng giao diện duy nhất. Điều này làm giảm đường cong học tập cần thiết để tận dụng thành công hệ thống con. Nó cũng thúc đẩy việc tách hệ thống con khỏi nhiều khách hàng tiềm năng của nó. Mặt khác, nếu Mặt tiền là điểm truy cập duy nhất cho hệ thống con, nó sẽ giới hạn các tính năng và tính linh hoạt mà "người dùng quyền lực" có thể cần.
Một mẫu thiết kế là một giải pháp tái sử dụng chung cho một vấn đề thường xảy ra trong một bối cảnh nhất định trong thiết kế phần mềm.
Mẫu thiết kế Facade là một mẫu cấu trúc vì nó xác định cách tạo mối quan hệ giữa các lớp hoặc các thực thể. Mẫu thiết kế mặt tiền được sử dụng để xác định giao diện đơn giản hóa cho một hệ thống con phức tạp hơn.
Mẫu mặt tiền là lý tưởng khi làm việc với một số lượng lớn các lớp phụ thuộc lẫn nhau hoặc với các lớp yêu cầu sử dụng nhiều phương thức, đặc biệt khi chúng phức tạp để sử dụng hoặc khó hiểu. Lớp mặt tiền là một "trình bao bọc" chứa một tập hợp các thành viên dễ hiểu và dễ sử dụng. Các thành viên này truy cập hệ thống con thay mặt cho người dùng mặt tiền, ẩn các chi tiết thực hiện.
Mẫu thiết kế mặt tiền đặc biệt hữu ích khi gói các hệ thống con được thiết kế kém nhưng không thể được cấu trúc lại do mã nguồn không có sẵn hoặc giao diện hiện có được sử dụng rộng rãi. Đôi khi bạn có thể quyết định triển khai nhiều mặt tiền để cung cấp các tập hợp chức năng cho các mục đích khác nhau.
Một ví dụ sử dụng mẫu mặt tiền là để tích hợp một trang web với một ứng dụng kinh doanh. Phần mềm hiện có có thể bao gồm một lượng lớn logic kinh doanh phải được truy cập theo một cách cụ thể. Trang web có thể chỉ yêu cầu quyền truy cập hạn chế vào logic kinh doanh này. Ví dụ, trang web có thể cần hiển thị liệu một mặt hàng để bán đã đạt đến một mức độ hạn chế của chứng khoán. Phương thức IsLowStock của lớp mặt tiền có thể trả về giá trị Boolean để biểu thị điều này. Đằng sau hậu trường, phương pháp này có thể che giấu sự phức tạp của việc xử lý cổ phiếu vật lý hiện tại, cổ phiếu đến, các mặt hàng được phân bổ và mức cổ phiếu thấp cho từng mặt hàng.
Tất cả các mẫu thiết kế là một số lớp được sắp xếp theo cách này hay cách khác phù hợp với một ứng dụng cụ thể. Mục đích của mô hình mặt tiền là để che giấu sự phức tạp của một hoạt động hoặc hoạt động. Bạn có thể xem một ví dụ và tìm hiểu mô hình mặt tiền từ http://prec Chínhconcise.com /design_potypes/facade.php
Nó chỉ đơn giản là tạo ra một trình bao bọc để gọi nhiều phương thức. Bạn có một lớp A với phương thức x () và y () và lớp B với phương thức k () và z (). Bạn muốn gọi x, y, z cùng một lúc, để làm điều đó bằng cách sử dụng mẫu Facade, bạn chỉ cần tạo một lớp Facade và tạo một phương thức cho phép xyz (). Thay vì gọi riêng từng phương thức (x, y và z), bạn chỉ cần gọi phương thức trình bao (xyz ()) của lớp mặt tiền gọi các phương thức đó.
Mẫu tương tự là kho lưu trữ nhưng nó chủ yếu dành cho lớp truy cập dữ liệu.
Mẫu thiết kế mặt tiền đi theo mẫu thiết kế kết cấu. Trong mặt tiền ngắn có nghĩa là sự xuất hiện bên ngoài. Nó có nghĩa là trong mẫu thiết kế Mặt tiền, chúng tôi ẩn một cái gì đó và chỉ hiển thị những gì khách hàng thực sự yêu cầu. Đọc thêm tại blog dưới đây: http://www.sharepointcafe.net/2017/03/facade-design-potype-in-aspdotnet.html
Mẫu mặt tiền cung cấp một giao diện hợp nhất cho nhóm giao diện hệ thống con. Mặt tiền xác định một giao diện cấp cao, giúp đơn giản hóa công việc với hệ thống con.