Files
StructureHelper/StructureHelperLogics/Models/BeamShears/Logics/CloneStrategies/BeamShearCalculatorCloneStrategy.cs
2025-11-16 21:03:57 +05:00

34 lines
1.3 KiB
C#

using StructureHelperCommon.Infrastructures.Interfaces;
using StructureHelperCommon.Services;
namespace StructureHelperLogics.Models.BeamShears
{
internal class BeamShearCalculatorCloneStrategy : ICloneStrategy<IBeamShearCalculator>
{
private readonly ICloningStrategy cloningStrategy;
private IUpdateStrategy<IBeamShearCalculator> updateStrategy;
private ICloneStrategy<IBeamShearCalculatorInputData> inputDataCloningStrategy;
public BeamShearCalculatorCloneStrategy(ICloningStrategy cloningStrategy)
{
this.cloningStrategy = cloningStrategy;
}
public IBeamShearCalculator GetClone(IBeamShearCalculator sourceObject)
{
CheckObject.ThrowIfNull(cloningStrategy);
CheckObject.ThrowIfNull(sourceObject);
InitializeStrategies();
BeamShearCalculator calculator = new(Guid.NewGuid());
updateStrategy.Update(calculator, sourceObject);
calculator.InputData = inputDataCloningStrategy.GetClone(sourceObject.InputData);
return calculator;
}
private void InitializeStrategies()
{
updateStrategy ??= new BeamShearCalculatorUpdateStrategy();
inputDataCloningStrategy ??= new BeamShearCalculatorInputDataCloneStrategy(cloningStrategy);
}
}
}