1月8日日记-进一步学习使用委托,理解策略模式和工厂模式
首先贴过来个IoC 容器和Dependency Injection 模式这篇论文,对学习Spring.net很有帮助啊。。IoC 容器和Dependency Injection 模式
然后通过看小菜编程成长记这些篇文章,对策略模式和反射有了点更深入的理解。通过反射,可以动态加载方法,减少判断,时间紧,还是贴代码吧。。
客户端调用
Factory f=new Factory ();
DataRow dr = ((DataRow[])ds.Tables[0].Select("name='" + cbxType.SelectedItem.ToString() + "'"))[0];
//声明一个参数的对象数组
object[] args = null;
//若有参数,则将其分割成字符串数组,用于实例化时所用的参数
if (dr["para"].ToString() != "")
args = dr["para"].ToString().Split(',');
//通过反射实例化出相应的算法对象
f.setBehavior((Money)Assembly.Load("商场管理软件").CreateInstance("商场管理软件." + dr["function"].ToString(), false, BindingFlags.Default, null, args, null, null));
DataRow dr = ((DataRow[])ds.Tables[0].Select("name='" + cbxType.SelectedItem.ToString() + "'"))[0];
//声明一个参数的对象数组
object[] args = null;
//若有参数,则将其分割成字符串数组,用于实例化时所用的参数
if (dr["para"].ToString() != "")
args = dr["para"].ToString().Split(',');
//通过反射实例化出相应的算法对象
f.setBehavior((Money)Assembly.Load("商场管理软件").CreateInstance("商场管理软件." + dr["function"].ToString(), false, BindingFlags.Default, null, args, null, null));
Context环境
class Factory
{
private Money m;
//根据条件返回相应的对象
public void setBehavior(Money a)
{
this.m = a;
}
public double GetResult(double money)
{
return m.GetMoney(money);
}
}
{
private Money m;
//根据条件返回相应的对象
public void setBehavior(Money a)
{
this.m = a;
}
public double GetResult(double money)
{
return m.GetMoney(money);
}
}
嘿嘿,本来还试了把用委托~还是不太熟悉,明天继续加油吧!

浙公网安备 33010602011771号