这个创作模式有名称吗?

时间:2013-09-19 14:00:22

标签: c# .net design-patterns factory-pattern

下面我应该怎么称呼“BFactory”。它不是真正的工厂,因为没有选择具体的类发生,并且它不一定每次都创建一个对象。它的类型是一个池,但用户不会返回他们完成后到达池中的Bs。它可以称为缓存,但性能不是主要目的。目的是使用相同的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];
    }
}

0 个答案:

没有答案