装饰者模式---使用装饰者模式实现带日志记录功能的数据库命令执行类

装饰者模式:"在不改变对象的前提下,动态增加其功能",不希望改变原有的类,或采用创建子类的方法增加功能.
在修饰了一个对象后,其接口不应该发生变化,否则这个对象不能被原有调用者使用,修饰失去了意义,装饰者与被装饰者具有相同的接口
 
using System;
using System.Data;

namespace cxyDecorator
{
    
public abstract  class clsAbstractDb
    

        
public abstract string ConnectionString
        
{
            
get;
            
set;
        }


        
public abstract void Open();
        
public  abstract void Close();
        
public abstract DataTable ExecSql(string strSql);
        
public abstract void ExecNonQuery(string strSql);

    }



    
public class SqlDb:clsAbstractDb
    
{
        
private string m_constr;
        
public override  string ConnectionString
        
{
            
get
            
{
                
return m_constr;
            }

            
set
            
{
                m_constr
=value;
            }

        }


        
public override void Open()
        
{
            
//...
        }


        
public override void Close()
        
{
            
//..
        }


        
public override DataTable ExecSql(string strSql)
        
{
            
return new DataTable();
        }


        
public  override void ExecNonQuery(string strSql)
        
{
            
//....
        }

    }



    
public class LogDb:clsAbstractDb
    
{
        
private clsAbstractDb worker;
        
public LogDb(clsAbstractDb db)
        
{
            worker
=db;
        }


        
"clsAbstractDb"

        
private void Record(string eventstr)
        
{
            
//log it into somewhere;
        }
 

    }


    
public class DbFactory
    
{
         
        
public static clsAbstractDb CreateDb(string dbtype)
        
{
            clsAbstractDb test;
            test
=new SqlDb();
            
switch(dbtype)
            
{
                
case "sql"
                    
break;

                    
//                case "oracle":
                    
//                    test=new oracleDb();
                    
                    
//.....
                     
            }

            
return test;
        }


        
public static clsAbstractDb CreateLogDb(string dbtype)
        
{
            clsAbstractDb log;
            log
=new LogDb(CreateDb(dbtype));
            
return log;
        }

    }


}
阅读更多
换一批

没有更多推荐了,返回首页