public interface IDataFetch()
{
DataTable FetchData();
}public class Decorator : IDataFetch
{
        protected  IDataFetch _decoratee = null;        public Decorator(IDataFetch decoratee)
        {
            _decoratee = decoratee;
        }        public virtual DataTable FetchData()
        {
            if (this._decoratee == null)
                throw new Exception("");            return _decoratee.FetchData(interest);
        }
}public class theFetch :  IDataFetch
{
public DataTable FetchData()
{
tbl = ....;
return tbl;
}}public Decorator1: Decorator
{
public Action1( IDataFetch dee) :base(dee){}
public override DataTable FetchData()
{
DataTable tbl = base.FetchData();
foreach ( DataRow row in tbl.rows)
{
//execute action1 decorator
...
}
}
}public Decorator2: Decorator
{
public Action2( IDataFetch dee) :base(dee){}
public override DataTable FetchData()
{
DataTable tbl = base.FetchData();
foreach ( DataRow row in tbl.rows)
{
//execute action2 decorator
...
}
}
}
上面代码中,每个Decorator都要循环一遍DataTable,进行Decorator,会不会有效率问题?
相比在一个循环中做完所有的动作,哪个效率高一些。
这样的效率问题需不需要考虑?

解决方案 »

  1.   

    看不懂lz的代码。lz还不如研究“回字有几种写法”,好像也比这个代码更清楚一些。
      

  2.   


    除了
    Decorator1,
    Decorator2
    这两个类的构造函数写错了之外。其他没发现什么问题。类似这样的Decorator模式的代码,网上一找一大堆。出言不逊,不要把无知当个性。
      

  3.   

    另外你的代码中,无数的语法错误,甚至连class关键字都没有,甚至都会出现莫名其妙的 actionX():base{} 这种语法,那么我建议你写代码时先注重大量实用经验积累,然后再纠缠什么时髦模式概念。
      

  4.   

    你根本不解释所谓DataTable想干什么用,就问“每个Decorator都要循环一遍DataTable”这有意义吗?你修水管子的时候,问人你的同事“我穿西服应该扣几颗扣子”有什么意义吗?
      

  5.   


    我只不过想问这样一个问题:
    foreach( DataRow row in tbl.rows)
    {
        action1(row);
        action2(row);
        action3(row);
    }

    foreach( DataRow row in tbl.rows)
    {
        action1(row);
    }
    foreach( DataRow row in tbl.rows)
    {
        action2(row);
    }
    foreach( DataRow row in tbl.rows)
    {
        action3(row);
    }
    效率上会有多大的差别,实际项目中需要考虑这样的问题么?如此简单而已,我只不过把我的问题由来说了一下而已。