概述
享元模式是一种结构类型的设计模式 ,目的是在创建对象的时候,使用已有的对象代替新的对象的创建,减少内存的消耗提升性能。主要有,享元接口,享元类和享元工厂组成,通过享元工厂管理对应类的创建,而不是直接创建新的对象,然后再使用对应的类,这个共用的思想也类似于对象池的概念。
需求:创建三个角色,法师战士刺客,每个都有自己的行为,当创建重复的角色的时候,可以复用对象。
享元模式
cs
internal class Program
{
private static void Main(string[] args)
{
var factory = new Factory();
var FS = factory.GetCharacter("法师");
var ZS = factory.GetCharacter("战士");
var CK = factory.GetCharacter("刺客");
FS.Behavior("法术");
ZS.Behavior("攻击");
CK.Behavior("刺杀");
var CK1 = factory.GetCharacter("法师");
CK1.Behavior("法术");
}
public interface ICharacter//角色接口
{
void Behavior(string _Behavior);
}
public class Character : ICharacter//角色
{
private string Name;
public Character(string name)
{
Name = name;
}
public void Behavior(string _Behavior)
{
Console.WriteLine($"角色{Name}执行{_Behavior}!");
}
}
public class Factory//享元工厂
{
private Dictionary<string, ICharacter> keyValuePairs = new Dictionary<string, ICharacter>();
public ICharacter GetCharacter(string name)//获取角色,如果没有就创建,有就返回已有的
{
if (!keyValuePairs.ContainsKey(name))
{
keyValuePairs[name] = new Character(name);
}
else
{
Console.WriteLine($"使用了已存在的元素{name}");
}
return keyValuePairs[name];
}
}
}
输出:
角色法师执行法术!
角色战士执行攻击!
角色刺客执行刺杀!
使用了已存在的元素法师
角色法师执行法术!