如何实现具有多个参数且每个参数都是接口的Factory模式

问题描述

我对带有多个参数的工厂方法有些困惑,其中所有参数都可以由用户从GUI更改,如下图所示。

GUI Screen parameter selection

对于每个组合框项目,我都有一个界面和具体的实现。

我有一个SignalProcessor类,它通过以下3个接口获取参数:

      <Popover
        id={id}
        open={open}
        anchorEl={anchorEl}
        onClose={handleClose}
        value={value}
        anchorOrigin={{
          vertical: 'top',horizontal: 'center',}}
        transformOrigin={{
          vertical: 'top',}}
        PaperProps={{
          style: { width: '100%' },}}

我决定根据所选的组合框值来生产和使用具体的类,因此创建了以下工厂类。

public interface ISignalProcessor
{
    double[] Process(double[] data);
}

 public class SignalProcessor : ISignalProcessor
{
    private IFft _fft;

    private IWindowing _windowing;

    private IInverseSpectrum _inverseSpectrum;

    private IDecimation _decimation;

    public SignalProcessor(IWindowing windowing,IFft fft,IInverseSpectrum inverseSpectrum,IDecimation decimation)
    {
        _windowing = windowing;
        _fft = fft;
        _inverseSpectrum = inverseSpectrum;
        _decimation = decimation;
    }

    public double[] Process(double[] data)
    {
        var windowingResult = _windowing.Calculate(data);
        var fftResult = _fft.Calculate(windowingResult);
        var inverseSpectrumResult = _inverseSpectrum.Calculate(fftResult);
        return _decimation.Calculate(inverseSpectrumResult);
    }
}

然后按如下方式使用:

public static class FactorySP
{
    public static ISignalProcessor Create(string windowingType,int fftSize,bool isInverse,string decimationType)
    {
        return new SignalProcessor(CreateWindowing(windowingType),CreateFft(fftSize),CreateInverseSpectrum(isInverse),CreateDecimation(decimationType));
    }

    private static IWindowing CreateWindowing(string windowingType)
    {
        switch (windowingType)
        {
            case "Triangular":
                return new Triangular();
            case "Rectangular":
                return new Rectangular();
            case "Hanning":
                return new Hanning();
        }
    }

    private static IFft CreateFft(int fftSize)
    {
        switch (fftSize)
        {
            case 128:
                return new Fft128();
            case 256:
                return new Fft256();
            case 512:
                return new Fft512();
            default:
                return new FftNull();
        }
    }
    private static IInverseSpectrum CreateInverseSpectrum(bool isInverse)
    {
        if (isInverse)
            return new InverseSpectrumTrue();

        return new InverseSpectrumFalse();
    }

    private static IDecimation CreateDecimation(string decimationType)
    {
        if (decimationType == "RealTimeDecimation")
            return new RealTimeDecimation();

        return new SweepDecimation();
    }
}

有没有比这更好的方法来得到我想要的东西?我觉得我使用的方法中缺少一些东西:) 我知道Factory方法不是那样的,但是否则我必须创建工厂类重载的所有组合和排列。

请帮助我改善类的实现。

最佳瑞格斯, 哈坎

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)