Я обдумываю хороший шаблон, который будет полезен в областях измеряемых единиц (т. Е. Длина, Время), и придумал следующий вариант использования, начальные классы и, конечно, вопросы!
1) Помогает ли сложный шаблон или усложняет?
2) Должны ли методы Convert в ComposityNode быть отдельным классом преобразователя?
Все комментарии приветствуются. Cheers,
Berryl
Пример использования:
var inch = new ConvertableUnit("inch", 1)
var foot = new ConvertableUnit("foot", 12)
var imperialUnits = new CompositeConvertableUnit("imperial units", .024)
imperialUnits.AddChild(inch)
imperialUnits.AddChild(foot)
var meter = new ConvertableUnit("meter", 1)
var millimeter = new ConvertableUnit("millimeter ", .001)
var imperialUnits = new CompositeConvertableUnit("metric units", 1)
imperialUnits.AddChild(meter)
imperialUnits.AddChild(millimeter)
var oneInch = new Quantity(1, inch);
var oneFoot = new Quantity(1, foot);
oneFoot.ToBase() // "12 inches"
var oneMeter = new Quantity(1, meter);
oneInch.ToBase() // .024 meters
Возможное решение
ConvertableUnit : Node
double Rate
string Name
Quantity
ConvertableUnit Unit
double Amount
CompositeConvertableUnit : Node
ISet<ConvertableUnit> _children
ConvertableUnit BaseUnit {get{ return _children.Where(c=>c.Rate == 1).First() } }
Quantity ConvertTo(Quantity from, Quantity to)
Quantity ToBase(Quantity from);