机房重构—策略模式+反射实现下机

前言

站在巨人的肩膀上 ,我知道了下机可以用到策略模式,《大化设计模式》这本书中说到可以将Context类与简单工厂相结合,从而将判断交给Context类。但是,书中还说可以进一步利用反射来改进Context类,这样更加的符合开-闭原则。

策略模式+反射实现

Context类无非就是根据用户的类型,实例化相应的类。我们可以利用反射技术,从配置文件中读取需要实例化的类名。但是我们接收的用户类型是中文的,而类名一般都是英文的,所以需要转换一下,那么我们可以先将从配置文件读取到的信息存到字典里,再利用字典来进行中英文转换。
1. 首先,反射需要用到配置文件,所以配置文件怎么写呢?

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  
    <appSettings>
      
        <!--server中.代表本地,也可以用local或localhost代替-->
        <add key="ConnStr" value="server=.;database=charge;user ID=sa;pwd=123456"/>
        <add key="DB"      value="Sql"/>
        
        <!--字典的键值,反射到字典中,利用字典将中文转换成相应的类名-->
        <add key="dicKey"   value="固定用户,临时用户"/>
        <add key="dicValue" value="FixedUser,TempUser"/>
    </appSettings>
  
</configuration>

2. 接下来是Context类

public class Context
    {
        Type type = null;             

        public Context(string userType)
        {
            //定义两个数组用来接收字典的键和值
            string[] dicKey = ConfigurationManager.AppSettings["dicKey"].Split(',');
            string[] dicValue = ConfigurationManager.AppSettings["dicValue"].Split(',');
            Dictionary<string, string> dic = new Dictionary<string, string>();
            //将数组中的键和值依次添加到字典中
            for (int i = 0; i < dicKey.Length; i++)
            {
                dic.Add(dicKey[i].Trim(), dicValue[i].Trim());
            }
			//利用字典中英文转换,得到需要实例化的类名
            string className = "BLL.StudentBLL." + dic[userType];
            //利用反射获得相应用户类型的对象
            type = (Type)Assembly.Load("BLL").CreateInstance(className);
        }
        public decimal AcceptCash(LineLog lineLog,BasicdataInfo basicdataInfo)
        {
            return type.AcceptCash(lineLog, basicdataInfo);
        }
    }

接下来说一说为什么要用反射呢?
利用了反射技术,更加的符合开-闭原则,如果想增加新的用户类型,Context类也不用更改,直接添加相应的类以及更改配置文件即可。虽然这个项目很小,但是还是想体会一下反射技术。

后语

这不是最好的办法,但是我的能力有限,只能想到这儿了。看网上的解决办法,还可以通过从txt文件中读取信息到字典中,欢迎大家互相讨论交流,我知道大家还有更好的解决办法,如果您有更好的建议,欢迎在下方评论。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 21
    评论
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值