الگوی نما کیست؟ توضیح بده.
الگوی نما (فساد): یک الگوی ساختاری در الگوهای طراحی نرم‌افزار می‌باشد که معمولاً در برنامه‌نویسی شی گرا از آن استفاده می‌شود. نام آن برگرفته از شباهت آن به مشابه آن در معماری ساختمان نما (ساختمان) می‌باشد.نما، شیءای است که یک رابط راحت برای دسترسی به قسمت بزرگ و پیچیده‌ای از کد می‌باشد. مثل کتابخانه کلاس‌ها. فساد می‌تواند:معمولاً وقتی از الگوی طراحی نما استفاده می‌شود که سامانه از پیچیدگی زیادی برخوردار است یا فهمیدن آن دشوار است، به خاطر آن که تعداد زیادی از کلاس‌های دارای وابستگی داخلی یا کلاس‌هایی که کد آنها در دسترس نباشد وجود داشته باشند. این الگو پیچیدگی یک سامانه بزرگ را مخفی کرده و یک رابط ساده برای مشتری فراهم می‌کند. معمولاً دارای یک کلاس پوشه‌بندی ساده است که مجموعه‌ای از عضوهای مورد نیاز مشتری در آن وجود دارند. این اعضا به جای مشتری نما، به سامانه دسترسی دارند و نحوه پیاده‌سازی را مخفی می‌کنند.استفاده.معمولاً وقتی که رابط دسترسی راحت‌تر به یک شیء در سطح پایین‌تر نیاز باشد از فساد استفاده می‌شود. همچنین زمانه که پوشه‌بند (wrapper) نیاز است تا یک رابط خاصی را رعایت کند و رفتار چندوجهی (polymorphic) را رعایت کند از آداپتور می‌توان استفاده کرد. توسط دکوراتور می‌توان رفتار یک واسط را در زمان اجرا تغییر داد.معمولاً در مواقعی از الگوی نما استفاده می‌شود که:مثال.این مثال خلاصه از چگونگی ارتباط یک مشتری با یک نما در یک سامانه پیچیده است. (مشتری: کاربر، نما: کامپیوتر، سامانه: سخت‌افزار کامپیوتر)C.پیاده‌سازی.namespace DesignPattern.Facade class SubsystemA public string OperationA1() return "Subsystem A, Method A1\n"; public string OperationA2() return "Subsystem A, Method A2\n"; class SubsystemB public string OperationB1() return "Subsystem B, Method B1\n"; public string OperationB2() return "Subsystem B, Method B2\n"; class SubsystemC public string OperationC1() return "Subsystem C, Method C1\n"; public string OperationC2() return "Subsystem C, Method C2\n"; public class Facade private readonly SubsystemA a = new SubsystemA(); private readonly SubsystemB b = new SubsystemB(); private readonly SubsystemC c = new SubsystemC(); public void Operation1() Console.WriteLine("Operation 1\n" + a.OperationA1() + b.OperationB1() + c.OperationC1()); public void Operation2() Console.WriteLine("Operation 2\n" + a.OperationA2() + b.OperationB2() + c.OperationC2());نمونه کد.namespace DesignPattern.Facade.Sample // The 'Subsystem ClassA' class class CarModel public void SetModel() Console.WriteLine(" CarModel - SetModel"); /// &lt;summary&gt; /// The 'Subsystem ClassB' class /// &lt;/summary&gt; class CarEngine public void SetEngine() Console.WriteLine(" CarEngine - SetEngine"); // The 'Subsystem ClassC' class class CarBody public void SetBody() Console.WriteLine(" CarBody - SetBody"); // The 'Subsystem ClassD' class class CarAccessories public void SetAccessories() Console.WriteLine(" CarAccessories - SetAccessories"); // The 'Facade' class public class CarFacade private readonly CarAccessories accessories; private readonly CarBody body; private readonly CarEngine engine; private readonly CarModel model; public CarFacade() accessories = new CarAccessories(); body = new CarBody(); engine = new CarEngine(); model = new CarModel(); public void CreateCompleteCar() Console.WriteLine("******** Creating a Car **********"); model.SetModel(); engine.SetEngine(); body.SetBody(); accessories.SetAccessories(); Console.WriteLine("******** Car creation is completed. **********"); // Facade pattern demo class Program static void Main(string[] args) var facade = new CarFacade(); facade.CreateCompleteCar(); Console.ReadKey();جاوا./* Complex parts */class CPU {class HardDrive {class Memory {/* 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();Ruby.class CPU def freeze; end def jump(position); end def execute; endendclass Memory def load(position, data); endendclass HardDrive def read(lba, size); endendclass ComputerFacade def initialize @processor = CPU.new @ram = Memory.new @hd = HardDrive.new end def start @processor.freeze @ram.load(BOOT_ADDRESS, @hd.read(BOOT_SECTOR, SECTOR_SIZE)) @processor.jump(BOOT_ADDRESS) @processor.execute endendcomputer_facade = ComputerFacade.newcomputer_facade.start