创建型模式 简单工厂模式(2)

实现数学运算 快速傅里叶变换

其中 Complex是实体类
using System;

namespace FFT
{
    
/// <summary>
    
/// Summary description for Complex.
    
/// </summary>

    public class Complex
    
{
            
float real;
            
float imag;
       
//---------------------------------
            public Complex(float r, float i) {
                real 
= r;                              
                imag 
= i;
            }

        
//---------------------------------
        public void setReal(float r) {
            real 
= r;
        }

        
//---------------------------------
        public void setImag(float i) {
            imag
= i;
        }

        
//---------------------------------
        public float getReal() {
            
return real;
        }

        
//---------------------------------
        public float getImag() {
            
return imag;
        }


        
    }

}


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

namespace FFT
{
    
/// <summary>
    
/// Summary description for Cocoon.
    
/// </summary>

    public class Cocoon     {
        
static public Butterfly getButterfly(float y) {
            
if (y != 0)
                
return new TrigButterfly(y);
            
else
                
return new addButterfly(y);
        }

    }

}

其中TrigButterfly和addButterfly都继承Butterfly
using System;

namespace FFT
{
    
/// <summary>
    
/// Summary description for TrigButterfly.
    
/// </summary>

    public class TrigButterfly:Butterfly
    
{
        
float y;
        
float oldr1, oldi1;
        
float cosy, siny;
        
float r2cosy, r2siny, i2cosy, i2siny;
   
        
public TrigButterfly(float angle) {
            y 
= angle;
            cosy 
= (float) Math.Cos(y);
            siny 
= (float)Math.Sin(y);
 
        }

        
public override void Execute(Complex xi, Complex xj) {
            oldr1 
= xi.getReal();
            oldi1 
= xi.getImag();
            r2cosy 
= xj.getReal() * cosy;
            r2siny 
= xj.getReal() * siny;
            i2cosy 
= xj.getImag()*cosy;
            i2siny 
= xj.getImag()*siny;
            xi.setReal(oldr1 
+ r2cosy +i2siny);
            xi.setImag(oldi1 
- r2siny +i2cosy);
            xj.setReal(oldr1 
- r2cosy - i2siny);
            xj.setImag(oldi1 
+ r2siny - i2cosy);  
        }


    }

}


using System;

namespace FFT
{
    
/// <summary>
    
/// Summary description for AddButterfly.
    
/// </summary>

    class addButterfly : Butterfly 
    
{
       
float oldr1, oldi1;

        
public addButterfly(float angle) {
        }

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

    }


}

using System;

namespace FFT
{
    
/// <summary>
    
///Computes the complex multiplications for the FFT
    
/// </summary>

    public abstract class Butterfly
    
{
            
float y;
            
public Butterfly() {
            }

            
public Butterfly(float angle) {
                y 
= angle;
            }

            
abstract public void Execute(Complex x, Complex y);
    }

}


其中Butterfly是抽象类,
abstract public void Execute(Complex x, Complex y);
是抽象方法
posted @ 2006-11-29 11:16  jhtchina  阅读(213)  评论(0)    收藏  举报