在今天的文章中,我们将研究c#中的Flyweight模式(轻量级模式)。此模式用于以有效的方式创建可重用对象,可由不同的客户端使用。
我们还将看一个使用此模式的实际示例。
Flyweight模式是c#中的一种结构模式。这意味着它是由设计时的结构定义的。在轻量级模式中,我们只需创建许多相关的类,并根据客户机的请求类型为调用客户机提供一个实例。这些实例保存在一个对象中,例如Dictionary等,并按需提供给调用客户机。因此,我们在flyweight模式中使用另一个模式,这就是工厂模式。让我们看一个例子,它将使这个模式更加清晰。
让我们使用Visual Studio 2019 Community Edition创建一个简单的控制台应用程序。我们将为这个项目选择。net 5框架。
现在,更新这两个文件中的代码,如下所示,
(Program.cs)
using ConsoleAppFlyWeight; using System; string empType = "FullTime"; var factory = new EmployeeTaxFactory(); var employeeTax = factory.GetEmployeeTaxBracket(empType); employeeTax.DisplayTaxBracket(); empType = "PartTime"; employeeTax = factory.GetEmployeeTaxBracket(empType); employeeTax.DisplayTaxBracket(); empType = "FullTime"; employeeTax = factory.GetEmployeeTaxBracket(empType); employeeTax.DisplayTaxBracket(); Console.ReadKey();
(Flyweight.cs)
using System; using System.Collections.Generic; namespace ConsoleAppFlyWeight { public interface IEmployeeTax { string EmployeeType { get; set; } int TaxBracket { get; set; } void DisplayTaxBracket(); } public class EmployeeTaxFactory { private Dictionary < string, IEmployeeTax > _employeesTax = new(); public IEmployeeTax GetEmployeeTaxBracket(string key) { IEmployeeTax employeeTax = null; if (_employeesTax.ContainsKey(key)) { employeeTax = _employeesTax[key]; } else { switch (key) { case "FullTime": employeeTax = new FullTimeEmployee(); break; case "PartTime": employeeTax = new PartTimeEmployee(); break; } _employeesTax.Add(key, employeeTax); } return employeeTax; } } public class FullTimeEmployee: IEmployeeTax { public string EmployeeType { get; set; } public int TaxBracket { get; set; } public FullTimeEmployee() { EmployeeType = "FullTime"; TaxBracket = 1; } public void DisplayTaxBracket() { Console.WriteLine($ "The Tax Bracket is {TaxBracket}"); } } public class PartTimeEmployee: IEmployeeTax { public string EmployeeType { get; set; } public int TaxBracket { get; set; } public PartTimeEmployee() { EmployeeType = "PartTime"; TaxBracket = 2; } public void DisplayTaxBracket() { Console.WriteLine($ "The Tax Bracket is {TaxBracket}"); } } }
当我们运行应用程序时,我们会看到下面的内容,
在Flyweight.cs文件中,我们创建了一个接口和两个具体类,每个类都实现了这个接口。最后,我们创建工厂类,它是这个模式的核心,在这个模式中我们检查请求类型(在我们的示例代码中可以是全职的或兼职的),并返回特定的具体类。与简单工厂模式的主要区别是,我们还在字典对象中维护这个实例,当有针对该类的后续请求时,我们从字典中返回它。您可以在工厂类中放置一个断点,并查看当我们请求全职类时,它第二次从字典中返回。因此,我建议这种模式只适用于简单的、短跨度的类。
在本文中,我们研究了c#中的轻量级模式。我们还研究了此模式的实际实现,以及何时应该将此模式用于标准工厂模式。编码快乐!
2016 © donet5.comApache Licence 2.0