轻量级工厂(C)
简单来说:
一个飞锤工厂 ,对于一个给定的,已知的,关键总会给同一对象的响应。对于新密钥,将创建实例并将其返回。
使用工厂:
ISomeFactory<string, object> factory = new FlyweightFactory<string, object>();
var result1 = factory.GetSomeItem("string 1");
var result2 = factory.GetSomeItem("string 2");
var result3 = factory.GetSomeItem("string 1");
//Objects from different keys
bool shouldBeFalse = result1.Equals(result2);
//Objects from same key
bool shouldBeTrue = result1.Equals(result3);
执行:
public interface ISomeFactory<TKey,TResult> where TResult : new()
{
TResult GetSomeItem(TKey key);
}
public class FlyweightFactory<TKey, TResult> : ISomeFactory<TKey, TResult> where TResult : new()
{
public TResult GetSomeItem(TKey key)
{
TResult result;
if(!Mapping.TryGetValue(key, out result))
{
result = new TResult();
Mapping.Add(key, result);
}
return result;
}
public Dictionary<TKey, TResult> Mapping { get; set; } = new Dictionary<TKey, TResult>();
}
额外说明
我建议在此解决方案中添加 IoC Container
的使用(如此处的不同示例中所述),而不是创建自己的新实例。可以通过向容器添加 TResult
的新注册然后从中解析(而不是示例中的 dictionary
)来实现。