Кажется, я мысленно застрял в дилемме "Веселый шаблон".
Во-первых, скажем, у меня есть одноразовый тип DisposableFiddle
и factory FiddleFactory
:
public interface DisposableFiddle : IDisposable
{
// Implements IDisposable
}
public class FiddleFactory
{
public DisposableFiddle CreateFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns a newly created fiddle.
}
}
Тогда, на мой взгляд, клиенту FiddleFactory
совершенно ясно, что factory не претендует на право собственности на созданный скрипт и что он несет ответственность за распоряжение скриптом, когда он с ним связан.
Однако пусть вместо этого скажу, что я хочу делиться скриптами между клиентами, используя шаблон Flyweight:
public class FiddleFactory
{
private Dictionary<SomethingThatDifferentiatesFiddles, DisposableFiddle> fiddles = new ...;
public DisposableFiddle CreateFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns an existing fiddle if a corresponding s is found,
// or a newly created fiddle, after adding it to the dictionary,
// if no corresponding s is found.
}
}
Затем я чувствую моральную обязанность сделать сам factory доступным, поскольку он создает скрипты и сохраняет ссылки на них в течение всей их жизни. Но это вызовет проблемы у клиентов, которые предположили, что они владеют скриптами, и поэтому должны распоряжаться ими.
Является ли проблема фактически тем, что я называю factory FiddleFactory
вместо, скажем, FiddlePool
, и метод создания CreateFiddle
вместо GetFiddle
? Вот так:
public class FiddlePool : IDisposable
{
private Dictionary<SomethingThatDifferentiatesFiddles, DisposableFiddle> fiddles = new ...;
public DisposableFiddle GetFiddle(SomethingThatDifferentiatesFiddles s)
{
// returns an existing fiddle if a corresponding s is found,
// or a newly created fiddle, after adding it to the dictionary,
// if no corresponding s is found.
}
// Implements IDisposable
}
Затем клиенту становится понятнее, что он не будет владеть возвращенной скрипкой, и это ответственность пула, чтобы избавиться от скриптов.
Или это может быть легко разрешено документально?
Есть ли выход из дилеммы? Есть ли даже дилемма?: -)