我应该在下面调用什么“BFactory”。它不是真正的工厂,因为没有选择具体的类,也不一定每次都创建一个对象。它是一种池,但用户在使用完 B 后不会将其返回到池中。它可以称为缓存,但性能不是主要目的。目的是每个使用相同 BFactory 的人在通过相同的 A 时都会得到相同的 B,这听起来有点像单例。
public class A
{
public int MyProperty { get; set; }
}
public class B
{
public B(A wrapped)
{
Wrapped = wrapped;
}
public A Wrapped { get; set; }
}
public class BFactory
{
private Dictionary<A,B> _created = new Dictionary<A,B>();
public B GetB(A a)
{
if (_created.ContainsKey(a) == false)
{
_created[a] = new B(a);
}
return _created[a];
}
}
这是一个更真实的例子:
通过将 TextBlock 绑定到 MyViewModel 的 ValueString 属性,来自 MyModel 的值显示在应用程序的多个位置。用户可以选择以百分比或小数的形式显示该值,如果更新为一个,则应在所有位置进行更新。
public class MyModel
{
public int Value { get; set; }
}
public class MyViewModel
{
private readonly MyModel _model;
public MyViewModel(MyModel model)
{
_model = model;
}
public string ValueString
{
get { return string.Format(FormatString, _model.Value); }
}
public string FormatString { get; set; }
}
public class MyViewModelFactory
{
private readonly Dictionary<MyModel, MyViewModel> _created = new Dictionary<MyModel, MyViewModel>();
public MyViewModel GetViewModel(MyModel model)
{
if (_created.ContainsKey(model) == false)
{
_created[model] = new MyViewModel(model);
}
return _created[model];
}
}