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