অন্য শ্রেণীর অনেকগুলি রয়েছে এমন কোন শ্রেণীর মুখোমুখি কি ?
এটিকে ডিজাইনের ধরণ কী করে? আমার কাছে এটি সাধারণ শ্রেণির মতো।
আপনি কি আমাকে এই ফেকাস প্যাটার্নটি ব্যাখ্যা করতে পারেন ?
অন্য শ্রেণীর অনেকগুলি রয়েছে এমন কোন শ্রেণীর মুখোমুখি কি ?
এটিকে ডিজাইনের ধরণ কী করে? আমার কাছে এটি সাধারণ শ্রেণির মতো।
আপনি কি আমাকে এই ফেকাস প্যাটার্নটি ব্যাখ্যা করতে পারেন ?
উত্তর:
একটি ডিজাইনের প্যাটার্ন হ'ল একটি পুনরাবৃত্তি সমস্যা সমাধানের একটি সাধারণ উপায়। সমস্ত ডিজাইনের ধরণগুলিতে ক্লাসগুলি কেবলমাত্র সাধারণ ক্লাস। কী গুরুত্বপূর্ণ তা হ'ল তারা কীভাবে কাঠামোগত হয় এবং প্রদত্ত সমস্যা সমাধানের জন্য তারা কীভাবে একসাথে কাজ করে the
ছদ্মরূপ নকশা প্যাটার্ন একটি জটিল সিস্টেমের ইন্টারফেস সরলীকৃত; কারণ এটি সাধারণত সমস্ত শ্রেণীর সমন্বয়ে গঠিত যা জটিল সিস্টেমের উপ-সিস্টেমগুলি তৈরি করে।
একটি ছদ্মরূপ সিস্টেম জটিল বিবরণ থেকে ব্যবহারকারীর ঢাল ও তাদের প্রদান করে simplified view
তা যা easy to use
। এটি decouples
সেই কোড যা সাবসিস্টেমগুলির বিবরণ থেকে সিস্টেমটি ব্যবহার করে, পরবর্তী সময়ে সিস্টেমটি সংশোধন করা আরও সহজ করে তোলে।
http://www.dofactory.com/Patterns/PatternFacade.aspx
http://www.blackwasp.co.uk/Facade.aspx
এছাড়াও, ডিজাইনের ধরণগুলি শেখার সময় গুরুত্বপূর্ণ বিষয়টি হ'ল কোন ধরণটি আপনার প্রদত্ত সমস্যার সাথে খাপ খায় এবং তা পরে এটি যথাযথভাবে ব্যবহার করে recognize কোনও প্যাটার্নের অপব্যবহার করা বা এটি যে কোনও সমস্যা হিসাবে এটি ফিট করার চেষ্টা করা খুব সাধারণ বিষয় কারণ আপনি এটি জানেন। ডিজাইনের ধরণগুলি ব্যবহার করে শেখার সময় সেই সমস্যাগুলি সম্পর্কে সচেতন হন।
উইকিপিডিয়াতে ফেকাড প্যাটার্নের দুর্দান্ত উদাহরণ রয়েছে।
/* 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();
}
}
পূর্ববর্তী উত্তরে বর্ণিত হিসাবে এটি গ্রাহক ক্লায়েন্টকে একটি সহজ ইন্টারফেস সরবরাহ করে। উদাহরণস্বরূপ: "ESPN দেখুন" হ'ল উদ্দেশ্যযুক্ত ফাংশন। তবে এর মধ্যে কয়েকটি পদক্ষেপ জড়িত:
তবে সম্মুখভাগ এটি সহজতর করবে এবং ক্লায়েন্টকে কেবল "ওয়াচ ইএসপিএন" ফাংশন সরবরাহ করবে।
ফেকাড সিস্টেমের জটিলতাগুলি গোপন করে এবং ক্লায়েন্টকে একটি ইন্টারফেস সরবরাহ করে যেখানে ক্লায়েন্ট সিস্টেমটি অ্যাক্সেস করতে পারে।
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
? আপনার উদাহরণে, মধ্যে Payment
এবং Inventory
?
একটি সংক্ষিপ্ত এবং সহজ ব্যাখ্যা:
ফাউডের সাথে এবং ছাড়াও পরিস্থিতিটি বোঝার চেষ্টা করুন: আপনি যদি অ্যাকাউন্টটি আউটআউট 1 থেকে অ্যাকাউন্ট 2 এ স্থানান্তর করতে চান তবে দুটি সাবসিস্টিমে আবেদন করা হবে, অ্যাকাউন্ট 1 থেকে প্রত্যাহার এবং অ্যাকাউন্ট 2 এ জমা দিন deposit
আপনার প্রশ্নগুলি সম্পর্কিত:
একটি ক্লাসের মুখোমুখি কি অন্যান্য ক্লাস অনেক রয়েছে?
হ্যাঁ. এটি প্রয়োগে অনেক উপ-সিস্টেমের জন্য একটি মোড়ক।
এটিকে ডিজাইনের ধরণ কী করে? আমার কাছে এটি সাধারণ শ্রেণির মতো
সমস্ত নকশা নিদর্শন খুব সাধারণ ক্লাস। @ উম্মেশ কনডোলিকার এই প্রশ্নের উত্তর যথাযথভাবে দিয়েছেন।
আপনি কি আমাকে এই ফেকাদ সম্পর্কে ব্যাখ্যা করতে পারেন, আমি নকশাগুলির নকশায় নতুন।
GoF মতে, ছদ্মরূপ নকশা প্যাটার্ন হিসাবে defind হয়:
একটি সাবসিস্টেমের ইন্টারফেসের সেটকে একটি ইউনিফাইড ইন্টারফেস সরবরাহ করুন। ফ্যাসাদ প্যাটার্ন একটি উচ্চ-স্তরের ইন্টারফেস সংজ্ঞা দেয় যা সাবসিস্টেমটি ব্যবহার করা সহজ করে তোলে easier
ছদ্মরূপ প্যাটার্ন সাধারণত যখন ব্যবহার করা হয়:
আসুন ক্লিয়ার্ট্রিপ ওয়েবসাইটের একটি আসল শব্দের উদাহরণ গ্রহণ করি ।
এই ওয়েবসাইটটি বুক করার বিকল্প সরবরাহ করে
টুকিটাকি সংকেতলিপি:
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
ট্র্যাভেলফ্যাকডের বই এপিআই অভ্যন্তরীণভাবে সাব-সিস্টেমের এপিআইয়ের নীচে কল করে
flightBooking.bookFlight
trainBooking.bookTrain(info);
hotelBooking.bookHotel(info);
এই উপায়ে, TravelFacade
উপ-সিস্টেমের এপিআই প্রকাশের সাথে সহজ এবং সহজ এপিআই সরবরাহ করে।
মূল গ্রহণযোগ্যতা: ( পঙ্কজ কুমারের জার্নালদেব নিবন্ধ থেকে )
আরও ভাল বোঝার জন্য উত্স তৈরির নিবন্ধটি একবার দেখুন ।
ফ্যাকাস প্যাটার্নটি একটি সহজ ইন্টারফেস তৈরির ফলস্বরূপ অন্যান্য অনেক ইন্টারফেসের একটি মোড়ক।
ডিজাইনের ধরণগুলি দরকারী কারণ তারা পুনরাবৃত্তি সমস্যাগুলি সমাধান করে এবং সাধারণভাবে কোড সরল করে ify বিকাশকারীদের একটি দলে যারা একই প্যাটার্নগুলি ব্যবহার করতে সম্মত হন এটি একে অপরের কোড বজায় রাখার সময় দক্ষতা এবং বোঝার উন্নতি করে।
আরও নিদর্শন সম্পর্কে পড়ার চেষ্টা করুন:
মুখোমুখি প্যাটার্ন: http://www.dofactory.com/Patterns/PatternFacade.aspx#_self1
বা আরও সাধারণভাবে: http://www.dofactory.com/Patterns/Patterns.aspx
ফ্যাডে প্যাটার্নের একটি অতিরিক্ত ব্যবহার হতে পারে আপনার দলের শেখার বক্ররেখা হ্রাস করা। আমাকে যদি আপনি একটি উদাহরণ দিতে:
আসুন আমরা ধরে নিই যে আপনার অ্যাপ্লিকেশনটির এমএস এক্সেলের সাথে এক্সেল দ্বারা সরবরাহিত সিওএম অবজেক্ট মডেলটি ব্যবহার করে যোগাযোগ করা দরকার। আপনার দলের সদস্যদের মধ্যে একটি সমস্ত এক্সেল এপিআই জানে এবং সে এর উপরে একটি মুখোমুখি তৈরি করে, যা অ্যাপ্লিকেশনটির সমস্ত বেসিক পরিস্থিতি পূরণ করে। দলের অন্য কোনও সদস্যের এক্সেল এপিআই শিখতে সময় ব্যয় করার দরকার নেই। দলটি কোনও দৃশ্যের পরিপূর্ণতায় জড়িত ইন্টার্নাল বা সমস্ত এমএস এক্সেল বস্তুগুলি না জেনে মুখোমুখি ব্যবহার করতে পারে। এটা দারুণ না?
সুতরাং, এটি একটি জটিল সাব-সিস্টেমের শীর্ষে একটি সরলীকৃত এবং একীভূত ইন্টারফেস সরবরাহ করে।
মুখোশের আরও একটি উদাহরণ: বলুন যে আপনার অ্যাপ্লিকেশনটি ডেটাবেসের সাথে সংযুক্ত রয়েছে এবং ইউআইতে ফলাফল প্রদর্শন করবে। আপনি নিজের অ্যাপ্লিকেশনটিকে কনফিগারযোগ্য করার জন্য মুখোশ ব্যবহার করতে পারেন, যেমন ডেটাবেস ব্যবহার করে বা মক অবজেক্টগুলি ব্যবহার করে। সুতরাং আপনি মুখোমুখি ক্লাসে সমস্ত ডাটাবেস কল করবেন, যেখানে এটি অ্যাপ্লিকেশন কনফিগারেশনটি পড়বে এবং ডিবি কোয়েরিটি বরখাস্ত করার বা মক অবজেক্টটি ফিরিয়ে দেওয়ার সিদ্ধান্ত নেবে। ডিবি অনুপলব্ধ ক্ষেত্রে এইভাবে অ্যাপ্লিকেশনটি ডিবি স্বাধীন হয়ে যায়।
একটি মুখোমুখি সরলীকৃত ফাংশনগুলি প্রকাশ করে যা বেশিরভাগ বলা হয় এবং প্রয়োগটি ক্লায়েন্টদের অন্যথায় মোকাবেলা করতে হবে এমন জটিলতাটি গোপন করে। সাধারণভাবে বাস্তবায়নে একাধিক প্যাকেজ, ক্লাস এবং সেখানে ফাংশন ব্যবহার করা হয় Well ভাল লিখিত পক্ষগুলি অন্য শ্রেণীর সরাসরি অ্যাক্সেসকে বিরল করে। উদাহরণস্বরূপ যখন আমি কোনও এটিএম পরিদর্শন করি এবং কিছু পরিমাণ প্রত্যাহার করি। এটিএম সরাসরি মালিকানাধীন ব্যাঙ্কে চলে যাচ্ছে বা কোনও বহিরাগত ব্যাংকের জন্য কোনও আলোচনার নেটওয়ার্কের মধ্য দিয়ে যাচ্ছে কিনা তা এটিএমটি লুকিয়ে রাখে। এটিএমটি একাধিক ডিভাইস এবং উপ-সিস্টেম গ্রাসকারী একটি মুখের মতো কাজ করে যা ক্লায়েন্ট হিসাবে আমাকে সরাসরি মোকাবেলা করতে হবে না।
প্যাটার্নটির একটি খুব ভাল বাস্তব জীবনের উদাহরণ রয়েছে - গাড়ি স্টার্টার ইঞ্জিন ।
ড্রাইভার হিসাবে, আমরা কেবল কীটি চালু করি এবং গাড়িটি শুরু হয়। যতটা সম্ভব সহজ। পর্দার আড়ালে, অন্যান্য অনেক গাড়ি সিস্টেম জড়িত (যেমন ব্যাটারি, ইঞ্জিন, জ্বালানি ইত্যাদি), যাতে গাড়িটি সফলভাবে শুরু করা যায় তবে তারা স্টারটারের আড়ালে লুকিয়ে থাকে।
আপনি দেখতে পাচ্ছেন, গাড়ী স্টার্টারটি ফেকড। এটি আমাদের অন্যান্য সমস্ত গাড়ি সিস্টেমের জটিলতার বিষয়ে চিন্তা না করেই ইন্টারফেসটি ব্যবহার করা সহজ করে।
সংক্ষেপে বলা যাক:
ফেকাড প্যাটার্নটি সহজতর করে এবং বৃহত কোড ব্লক বা এপিআইয়ের জটিলতা গোপন করে, একটি ক্লিনার, বোধগম্য এবং সহজে ব্যবহারের ইন্টারফেস সরবরাহ করে।
একটি মুখোমুখি হ'ল একটি ক্লাস যা কার্যকারিতা একটি স্তর যা একটি সরঞ্জামকিট এবং একটি সম্পূর্ণ অ্যাপ্লিকেশন মধ্যে থাকে, একটি প্যাকেজ বা সাবসিস্টেমের ক্লাসগুলির সরলিকৃত ব্যবহারের প্রস্তাব করে। মুখের প্যাটার্নের উদ্দেশ্যটি এমন একটি ইন্টারফেস সরবরাহ করা যা একটি সাবসিস্টেমটি ব্যবহার করা সহজ করে। - সি # তে বইয়ের নকশার প্যাটার্নগুলি থেকে বের করুন ।
ফেকাড একটি একক ইন্টারফেস অবজেক্টের মধ্যে একটি জটিল সাবসিস্টেম এনক্যাপসুলেট করার বিষয়ে আলোচনা করে। এটি সাবসিস্টেমটি সফলভাবে লাভ করার জন্য প্রয়োজনীয় শিক্ষার বক্ররেখা হ্রাস করে। এটি এর সম্ভাব্য অনেক ক্লায়েন্টদের থেকে সাবসিস্টেম ডিক্লোলিংকেও উত্সাহ দেয়। অন্যদিকে, ফ্যাসাদ যদি সাবসিস্টেমের একমাত্র অ্যাক্সেস পয়েন্ট হয় তবে এটি "বিদ্যুৎ ব্যবহারকারীদের" প্রয়োজনীয় বৈশিষ্ট্য এবং নমনীয়তা সীমাবদ্ধ করবে।
একটি ডিজাইনের প্যাটার্ন হ'ল সফ্টওয়্যার ডিজাইনের একটি নির্দিষ্ট প্রসঙ্গে একটি সাধারণ পুনরায় ব্যবহারযোগ্য সমাধান।
মুখোমুখি নকশা প্যাটার্ন একটি কাঠামোগত নিদর্শন কারণ এটি শ্রেণি বা সত্তার মধ্যে সম্পর্ক তৈরি করার জন্য একটি পদ্ধতি নির্ধারণ করে। আরও জটিল সাবসিস্টেমের সরলিকৃত ইন্টারফেসটি সংজ্ঞায়িত করার জন্য মুখোমুখি নকশার প্যাটার্নটি ব্যবহৃত হয়।
বিপুল সংখ্যক আন্তঃনির্ভরশীল ক্লাসগুলির সাথে কাজ করার সময় বা একাধিক পদ্ধতির ব্যবহারের প্রয়োজন এমন শ্রেণীর সাথে কাজ করার সময় মুখোমুখি প্যাটার্নটি আদর্শ, বিশেষত যখন তারা ব্যবহার করতে জটিল বা বুঝতে অসুবিধা হয়। ফেকাস ক্লাসটি এমন একটি "র্যাপার" যা এতে সদস্যদের একটি সেট থাকে যা সহজেই বোঝা যায় এবং ব্যবহার করা সহজ। এই সদস্যগণ বাস্তবায়নের বিশদটি গোপন করে সামনের ব্যবহারকারীর পক্ষে সাবসিস্টেমটি অ্যাক্সেস করে।
ফ্যাসাদ ডিজাইনের প্যাটার্নটি বিশেষত কার্যকর যখন সাবসিস্টেমগুলি ভালভাবে নকশাকৃত তবে মোড়ক ব্যবহার করা যায় না কারণ উত্স কোডটি উপলভ্য নয় বা বিদ্যমান ইন্টারফেসটি ব্যাপকভাবে ব্যবহৃত হয়। কখনও কখনও আপনি বিভিন্ন উদ্দেশ্যে কার্যকারিতার সাবসেট সরবরাহ করতে একাধিক উপদ্বীপ বাস্তবায়ন করার সিদ্ধান্ত নিতে পারেন।
মুখের প্যাটার্নের একটি উদাহরণ ব্যবসায়িক অ্যাপ্লিকেশন সহ কোনও ওয়েবসাইটকে সংহত করার জন্য। বিদ্যমান সফ্টওয়্যারটিতে প্রচুর পরিমাণে ব্যবসায়িক যুক্তি অন্তর্ভুক্ত থাকতে পারে যা নির্দিষ্ট পদ্ধতিতে অ্যাক্সেস করতে হবে। ওয়েব সাইটের জন্য এই ব্যবসায়িক যুক্তিতে সীমাবদ্ধ অ্যাক্সেসের প্রয়োজন হতে পারে। উদাহরণস্বরূপ, বিক্রয়ের জন্য কোনও আইটেম সীমিত মাত্রায় পৌঁছেছে কিনা তা ওয়েব সাইটে দেখানো দরকার। ফেইসড ক্লাসের ইসলাউস্টক পদ্ধতিটি এটি বোঝাতে একটি বুলিয়ান মান প্রদান করতে পারে। পর্দার আড়ালে, এই পদ্ধতিটি বর্তমান শারীরিক স্টক, ইনকামিং স্টক, বরাদ্দ আইটেম এবং প্রতিটি আইটেমের জন্য নিম্ন স্টক স্তরের প্রক্রিয়াজাতকরণের জটিলতাগুলি লুকিয়ে রাখতে পারে।
সমস্ত ডিজাইনের নিদর্শনগুলি এমন কোনও শ্রেণি যা কোনওভাবে বা অন্যভাবে সজ্জিত হয় যা একটি নির্দিষ্ট অ্যাপ্লিকেশনটির জন্য উপযুক্ত। মুখের প্যাটার্নের উদ্দেশ্য হ'ল কোনও অপারেশন বা অপারেশনগুলির জটিলতা আড়াল করা। আপনি একটি উদাহরণ দেখতে পারেন এবং http://preciselyconcise.com/design_patterns/facade.php থেকে মুখের ধরণ শিখতে পারেন
এটি কেবল একাধিক পদ্ধতিতে কল করার জন্য একটি মোড়ক তৈরি করে। আপনার কাছে মেথড x () এবং y () এবং মেথ কে () এবং জেড () সহ বি ক্লাস রয়েছে। আপনি x, y, z কে একবারে কল করতে চান, এটির জন্য, মুখের প্যাটার্নটি ব্যবহার করে আপনি কেবল একটি ফোকাস ক্লাস তৈরি করেন এবং একটি পদ্ধতি তৈরি করেন যা xyz () বলতে দেয়। প্রতিটি পদ্ধতিকে (x, y এবং z) পৃথকভাবে কল করার পরিবর্তে আপনি কেবল মুখোমুখি শ্রেণীর মোড়ক পদ্ধতিটিকে (xyz ()) কল করতে পারেন যা এই পদ্ধতিগুলি কল করে।
অনুরূপ প্যাটার্নটি সংগ্রহস্থল তবে এটি মূলত ডেটা অ্যাক্সেস স্তরের জন্য।
ফেকাড ডিজাইন প্যাটার্ন স্ট্রাকচারাল ডিজাইন প্যাটার্নের অধীনে আসে। সংক্ষেপে মুখের অর্থ বাহ্যিক উপস্থিতি। এর অর্থ হল ফেকাড ডিজাইনের ধরণে আমরা কিছু লুকিয়ে থাকি এবং কেবল ক্লায়েন্টের কী প্রয়োজন তা কেবল তা দেখাই। নীচের ব্লগে আরও পড়ুন: http://www.sharePointcafe.net/2017/03/facade-design-pattern-in-aspdotnet.html
ফ্যাসাদ প্যাটার্নটি সাবসিস্টেম ইন্টারফেস গ্রুপকে একটি ইউনিফাইড ইন্টারফেস সরবরাহ করে। সম্মুখভাগটি একটি উচ্চ-স্তরের ইন্টারফেস সংজ্ঞায়িত করে, যা সাবসিস্টেমের সাহায্যে কাজটি সহজ করে।