在今天的文章中,我们将研究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