装饰者模式:"在不改变对象的前提下,动态增加其功能",不希望改变原有的类,或采用创建子类的方法增加功能.
在修饰了一个对象后,其接口不应该发生变化,否则这个对象不能被原有调用者使用,修饰失去了意义,装饰者与被装饰者具有相同的接口
在修饰了一个对象后,其接口不应该发生变化,否则这个对象不能被原有调用者使用,修饰失去了意义,装饰者与被装饰者具有相同的接口
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"#region "clsAbstractDb"
public override string ConnectionString
...{
get
...{
return worker.ConnectionString;
}
set
...{
worker.ConnectionString=value;
}
}
public override void Open()
...{
//....
worker.Open();
Record("open");
}
public override void Close()
...{
//....
worker.Close();
Record("close");
}
public override DataTable ExecSql(string strSql)
...{
DataTable dt=new DataTable();
dt=worker.ExecSql(strSql);
//
Record("get datatable");
return dt;
}
public override void ExecNonQuery(string strSql)
...{
//....
worker.ExecNonQuery(strSql);
Record("strsql");
}
#endregion
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;
}
}
}
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"#region "clsAbstractDb"
public override string ConnectionString
...{
get
...{
return worker.ConnectionString;
}
set
...{
worker.ConnectionString=value;
}
}
public override void Open()
...{
//....
worker.Open();
Record("open");
}
public override void Close()
...{
//....
worker.Close();
Record("close");
}
public override DataTable ExecSql(string strSql)
...{
DataTable dt=new DataTable();
dt=worker.ExecSql(strSql);
//
Record("get datatable");
return dt;
}
public override void ExecNonQuery(string strSql)
...{
//....
worker.ExecNonQuery(strSql);
Record("strsql");
}
#endregion
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;
}
}
}