创建型模式 简单工厂模式(2)
实现数学运算 快速傅里叶变换

其中 Complex是实体类
 using System;
using System;

 namespace FFT
namespace FFT
 {
{
 /// <summary>
    /// <summary>
 /// Summary description for Complex.
    /// Summary description for Complex.
 /// </summary>
    /// </summary>
 public class Complex
    public class Complex
 {
    {
 float real;
            float real;
 float imag;
            float imag;
 //---------------------------------
       //---------------------------------
 public Complex(float r, float i) {
            public Complex(float r, float i) {
 real = r;
                real = r;                              
 imag = i;
                imag = i;
 }
            }
 //---------------------------------
        //---------------------------------
 public void setReal(float r) {
        public void setReal(float r) {
 real = r;
            real = r;
 }
        }
 //---------------------------------
        //---------------------------------
 public void setImag(float i) {
        public void setImag(float i) {
 imag= i;
            imag= i;
 }
        }
 //---------------------------------
        //---------------------------------
 public float getReal() {
        public float getReal() {
 return real;
            return real;
 }
        }
 //---------------------------------
        //---------------------------------
 public float getImag() {
        public float getImag() {
 return imag;
            return imag;
 }
        }

 
        
 }
    }
 }
}
 
Cocoon用来选择对那个类进行事例化
 using System;
using System;

 namespace FFT
namespace FFT
 {
{
 /// <summary>
    /// <summary>
 /// Summary description for Cocoon.
    /// Summary description for Cocoon.
 /// </summary>
    /// </summary>
 public class Cocoon     {
    public class Cocoon     {
 static public Butterfly getButterfly(float y) {
        static public Butterfly getButterfly(float y) {
 if (y != 0)
            if (y != 0)
 return new TrigButterfly(y);
                return new TrigButterfly(y);
 else
            else
 return new addButterfly(y);
                return new addButterfly(y);
 }
        }
 }
    }
 }
}
 其中TrigButterfly和addButterfly都继承Butterfly
其中TrigButterfly和addButterfly都继承Butterfly 
 using System;
using System;

 namespace FFT
namespace FFT
 {
{
 /// <summary>
    /// <summary>
 /// Summary description for TrigButterfly.
    /// Summary description for TrigButterfly.
 /// </summary>
    /// </summary>
 public class TrigButterfly:Butterfly
    public class TrigButterfly:Butterfly
 {
    {
 float y;
        float y;
 float oldr1, oldi1;
        float oldr1, oldi1;
 float cosy, siny;
        float cosy, siny;
 float r2cosy, r2siny, i2cosy, i2siny;
        float r2cosy, r2siny, i2cosy, i2siny;
 
   
 public TrigButterfly(float angle) {
        public TrigButterfly(float angle) {
 y = angle;
            y = angle;
 cosy = (float) Math.Cos(y);
            cosy = (float) Math.Cos(y);
 siny = (float)Math.Sin(y);
            siny = (float)Math.Sin(y);
 
 
 }
        }
 public override void Execute(Complex xi, Complex xj) {
        public override void Execute(Complex xi, Complex xj) {
 oldr1 = xi.getReal();
            oldr1 = xi.getReal();
 oldi1 = xi.getImag();
            oldi1 = xi.getImag();
 r2cosy = xj.getReal() * cosy;
            r2cosy = xj.getReal() * cosy;
 r2siny = xj.getReal() * siny;
            r2siny = xj.getReal() * siny;
 i2cosy = xj.getImag()*cosy;
            i2cosy = xj.getImag()*cosy;
 i2siny = xj.getImag()*siny;
            i2siny = xj.getImag()*siny;
 xi.setReal(oldr1 + r2cosy +i2siny);
            xi.setReal(oldr1 + r2cosy +i2siny);
 xi.setImag(oldi1 - r2siny +i2cosy);
            xi.setImag(oldi1 - r2siny +i2cosy);
 xj.setReal(oldr1 - r2cosy - i2siny);
            xj.setReal(oldr1 - r2cosy - i2siny);
 xj.setImag(oldi1 + r2siny - i2cosy);
            xj.setImag(oldi1 + r2siny - i2cosy);  
 }
        }

 }
    }
 }
}
 
 using System;
using System;

 namespace FFT
namespace FFT
 {
{
 /// <summary>
    /// <summary>
 /// Summary description for AddButterfly.
    /// Summary description for AddButterfly.
 /// </summary>
    /// </summary>
 class addButterfly : Butterfly
    class addButterfly : Butterfly 
 {
    {
 float oldr1, oldi1;
       float oldr1, oldi1;

 public addButterfly(float angle) {
        public addButterfly(float angle) {
 }
        }
 public override void Execute(Complex xi, Complex xj) {
        public override void Execute(Complex xi, Complex xj) {
 oldr1 = xi.getReal();
            oldr1 = xi.getReal();
 oldi1 = xi.getImag();
            oldi1 = xi.getImag();
 xi.setReal(oldr1 + xj.getReal());
            xi.setReal(oldr1 + xj.getReal());
 xj.setReal(oldr1 - xj.getReal());
            xj.setReal(oldr1 - xj.getReal());
 xi.setImag(oldi1 + xj.getImag());
            xi.setImag(oldi1 + xj.getImag());
 xj.setImag(oldi1 - xj.getImag());
            xj.setImag(oldi1 - xj.getImag());
 }
        }
 }
    }

 }
}
 
 using System;
using System;

 namespace FFT
namespace FFT
 {
{
 /// <summary>
    /// <summary>
 ///Computes the complex multiplications for the FFT
    ///Computes the complex multiplications for the FFT
 /// </summary>
    /// </summary>
 public abstract class Butterfly
    public abstract class Butterfly
 {
    {
 float y;
            float y;
 public Butterfly() {
            public Butterfly() {
 }
            }
 public Butterfly(float angle) {
            public Butterfly(float angle) {
 y = angle;
                y = angle;
 }
            }
 abstract public void Execute(Complex x, Complex y);
            abstract public void Execute(Complex x, Complex y);
 }
    }
 }
}
 
其中Butterfly是抽象类,
abstract public void Execute(Complex x, Complex y);
是抽象方法

其中 Complex是实体类
 using System;
using System;
 namespace FFT
namespace FFT {
{ /// <summary>
    /// <summary> /// Summary description for Complex.
    /// Summary description for Complex. /// </summary>
    /// </summary> public class Complex
    public class Complex {
    { float real;
            float real; float imag;
            float imag; //---------------------------------
       //--------------------------------- public Complex(float r, float i) {
            public Complex(float r, float i) { real = r;
                real = r;                               imag = i;
                imag = i; }
            } //---------------------------------
        //--------------------------------- public void setReal(float r) {
        public void setReal(float r) { real = r;
            real = r; }
        } //---------------------------------
        //--------------------------------- public void setImag(float i) {
        public void setImag(float i) { imag= i;
            imag= i; }
        } //---------------------------------
        //--------------------------------- public float getReal() {
        public float getReal() { return real;
            return real; }
        } //---------------------------------
        //--------------------------------- public float getImag() {
        public float getImag() { return imag;
            return imag; }
        }
 
         }
    } }
}
Cocoon用来选择对那个类进行事例化
 using System;
using System;
 namespace FFT
namespace FFT {
{ /// <summary>
    /// <summary> /// Summary description for Cocoon.
    /// Summary description for Cocoon. /// </summary>
    /// </summary> public class Cocoon     {
    public class Cocoon     { static public Butterfly getButterfly(float y) {
        static public Butterfly getButterfly(float y) { if (y != 0)
            if (y != 0) return new TrigButterfly(y);
                return new TrigButterfly(y); else
            else return new addButterfly(y);
                return new addButterfly(y); }
        } }
    } }
}
 using System;
using System;
 namespace FFT
namespace FFT {
{ /// <summary>
    /// <summary> /// Summary description for TrigButterfly.
    /// Summary description for TrigButterfly. /// </summary>
    /// </summary> public class TrigButterfly:Butterfly
    public class TrigButterfly:Butterfly {
    { float y;
        float y; float oldr1, oldi1;
        float oldr1, oldi1; float cosy, siny;
        float cosy, siny; float r2cosy, r2siny, i2cosy, i2siny;
        float r2cosy, r2siny, i2cosy, i2siny; 
    public TrigButterfly(float angle) {
        public TrigButterfly(float angle) { y = angle;
            y = angle; cosy = (float) Math.Cos(y);
            cosy = (float) Math.Cos(y); siny = (float)Math.Sin(y);
            siny = (float)Math.Sin(y); 
  }
        } public override void Execute(Complex xi, Complex xj) {
        public override void Execute(Complex xi, Complex xj) { oldr1 = xi.getReal();
            oldr1 = xi.getReal(); oldi1 = xi.getImag();
            oldi1 = xi.getImag(); r2cosy = xj.getReal() * cosy;
            r2cosy = xj.getReal() * cosy; r2siny = xj.getReal() * siny;
            r2siny = xj.getReal() * siny; i2cosy = xj.getImag()*cosy;
            i2cosy = xj.getImag()*cosy; i2siny = xj.getImag()*siny;
            i2siny = xj.getImag()*siny; xi.setReal(oldr1 + r2cosy +i2siny);
            xi.setReal(oldr1 + r2cosy +i2siny); xi.setImag(oldi1 - r2siny +i2cosy);
            xi.setImag(oldi1 - r2siny +i2cosy); xj.setReal(oldr1 - r2cosy - i2siny);
            xj.setReal(oldr1 - r2cosy - i2siny); xj.setImag(oldi1 + r2siny - i2cosy);
            xj.setImag(oldi1 + r2siny - i2cosy);   }
        }
 }
    } }
}
 using System;
using System;
 namespace FFT
namespace FFT {
{ /// <summary>
    /// <summary> /// Summary description for AddButterfly.
    /// Summary description for AddButterfly. /// </summary>
    /// </summary> class addButterfly : Butterfly
    class addButterfly : Butterfly  {
    { float oldr1, oldi1;
       float oldr1, oldi1;
 public addButterfly(float angle) {
        public addButterfly(float angle) { }
        } public override void Execute(Complex xi, Complex xj) {
        public override void Execute(Complex xi, Complex xj) { oldr1 = xi.getReal();
            oldr1 = xi.getReal(); oldi1 = xi.getImag();
            oldi1 = xi.getImag(); xi.setReal(oldr1 + xj.getReal());
            xi.setReal(oldr1 + xj.getReal()); xj.setReal(oldr1 - xj.getReal());
            xj.setReal(oldr1 - xj.getReal()); xi.setImag(oldi1 + xj.getImag());
            xi.setImag(oldi1 + xj.getImag()); xj.setImag(oldi1 - xj.getImag());
            xj.setImag(oldi1 - xj.getImag()); }
        } }
    }
 }
}
 using System;
using System;
 namespace FFT
namespace FFT {
{ /// <summary>
    /// <summary> ///Computes the complex multiplications for the FFT
    ///Computes the complex multiplications for the FFT /// </summary>
    /// </summary> public abstract class Butterfly
    public abstract class Butterfly {
    { float y;
            float y; public Butterfly() {
            public Butterfly() { }
            } public Butterfly(float angle) {
            public Butterfly(float angle) { y = angle;
                y = angle; }
            } abstract public void Execute(Complex x, Complex y);
            abstract public void Execute(Complex x, Complex y); }
    } }
}
其中Butterfly是抽象类,
abstract public void Execute(Complex x, Complex y);
是抽象方法
 
                    
                

 
     
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号