策略模式&反射
业务代码
class Operate
{
public string _firstKey;
public string _secondKey;
public string _extendKey;
public string FirstKey
{
get { return _firstKey;}
set{_firstKey=value;}
}
public string SecondKey
{
get { return _secondKey; }
set { _secondKey = value; }
}
public string ExtendKey
{
get { return _extendKey; }
set { _extendKey = value; }
}
public virtual string GetCheckValue(string _keyOne, string _keyTwo,string _keyThree)
{
string _checkValue = "";
return _checkValue;
}
}
class OperateOne : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c=new MethodsCheck();
string _checkValue = c.fileExistCheck(_keyOne,_keyTwo).ToString();
return _checkValue;
}
}
class OperateTwo : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.RegMachineCheck(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateThree : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.passwordValidate(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateFour : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.GetDriverVersion(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateFive : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.Getfilelength(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateSix : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.GetNetCardName(_keyTwo).ToString();
return _checkValue;
}
}
class OperateSeven : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.GetnetConfig(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateEight : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.RegUserCheck(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateNine : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.GetTxTstring(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateTen : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.GetXMLString(_keyOne, _keyTwo).ToString();
return _checkValue;
}
}
class OperateEleven : Operate
{
public override string GetCheckValue(string _keyOne, string _keyTwo, string _keyThree)
{
MethodsCheck c = new MethodsCheck();
string _checkValue = c.GetStringLinq(_keyOne,_keyTwo,_keyThree).ToString();
return _checkValue;
}
}
class OperateContext
{
private Operate or;
public void setBehavior(Operate Oper)
{
this.or = Oper;
}
public string GetValue(string _keyOne, string _keyTwo, string _keyThree)
{
return or.GetCheckValue(_keyOne, _keyTwo, _keyThree);
}
}
界面代码
string Xmlselect = ConfigurationManager.AppSettings["selectXml"].ToString();
DataSet ds = new DataSet();
ds.ReadXml(strPath + @"\" + Xmlselect);
dataGridView1.DataSource = ds.Tables[].DefaultView;
for (int i = ; i < ds.Tables["CheckTable"].Rows.Count; i++)
{
string MethodID = ds.Tables["CheckTable"].Rows[i]["MethodId"].ToString();
string CheckValue;
string refValue = ds.Tables["CheckTable"].Rows[i]["RefValue"].ToString();
OperateContext oc = new OperateContext();
oc.setBehavior((Operate)Assembly.Load("SECC").CreateInstance(("SECC."+MethodID),false,BindingFlags.Default,null,null,null,null));
CheckValue = oc.GetValue(ds.Tables["CheckTable"].Rows[i]["FirKey"].ToString(), ds.Tables["CheckTable"].Rows[i]["SecKey"].ToString(), ds.Tables["CheckTable"].Rows[i]["CheckRemark"].ToString());
ds.Tables["CheckTable"].Rows[i]["CheckValue"] = CheckValue;
if (refValue == CheckValue)
{
this.dataGridView1[, i].Value = true;
}
else
{
this.dataGridView1[, i].Value = false;
this.dataGridView1[, i].Style.ForeColor = Color.DarkRed;
lg.log(ds.Tables["CheckTable"].Rows[i]["CheckName"].ToString() + " Check " + ds.Tables["CheckTable"].Rows[i]["CheckValue"].ToString(), strPath, "ErrorLog");
}
}
XML文件
<?xml version="1.0" encoding="utf-8"?>
<Check> <CheckTable>
<MethodID>OperateOne</MethodID>
<FirKey>C:\\</FirKey>
<SecKey>ec.exe</SecKey>
<Checkid>1</Checkid>
<CheckName>Install EC.exe</CheckName>
<RefValue>True</RefValue>
<CheckValue>0</CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateOne</MethodID>
<FirKey>C:\\Windows\\Fonts\\</FirKey>
<SecKey>Vrinda.ttf</SecKey>
<Checkid>2</Checkid>
<CheckName>Install EC.exe</CheckName>
<RefValue>True</RefValue>
<CheckValue>0</CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateOne</MethodID>
<FirKey>C:\\Windows\\System32\\</FirKey>
<SecKey>MSVCR71.DLL</SecKey>
<Checkid>3</Checkid>
<CheckName>Install EC.exe</CheckName>
<RefValue>True</RefValue>
<CheckValue>0</CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateThree</MethodID>
<FirKey>Administrator</FirKey>
<SecKey>admin</SecKey>
<Checkid>3</Checkid>
<CheckName>AdminPassword</CheckName>
<RefValue>True</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateThree</MethodID>
<FirKey>Prodiva</FirKey>
<SecKey>Pica$4$Pass</SecKey>
<Checkid>4</Checkid>
<CheckName>ProdivaPassword</CheckName>
<RefValue>True</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateThree</MethodID>
<FirKey>Ethan</FirKey>
<SecKey>e</SecKey>
<Checkid>5</Checkid>
<CheckName>ProdivaPassword</CheckName>
<RefValue>True</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateFour</MethodID>
<FirKey>Driver</FirKey>
<SecKey>MONITOR\DELF014</SecKey>
<Checkid>5</Checkid>
<CheckName>Driver</CheckName>
<RefValue>6.1.7600.16385</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateFive</MethodID>
<FirKey>C:\Windows\</FirKey>
<SecKey>SCANACQ3090.ini</SecKey>
<Checkid>5</Checkid>
<CheckName>SCANACQ3090.ini</CheckName>
<RefValue>1074</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateSix</MethodID>
<FirKey>C:\Windows\</FirKey>
<SecKey>Realtek PCIe GBE Family Controller</SecKey>
<Checkid>5</Checkid>
<CheckName>CardName</CheckName>
<RefValue>TestNet</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateSeven</MethodID>
<FirKey>Realtek PCIe GBE Family Controller</FirKey>
<SecKey>*FlowControl</SecKey>
<Checkid>5</Checkid>
<CheckName>SCANACQ3090.ini</CheckName>
<RefValue>1</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateSeven</MethodID>
<FirKey>Realtek PCIe GBE Family Controller</FirKey>
<SecKey>*JumboPacket</SecKey>
<Checkid>5</Checkid>
<CheckName>SCANACQ3090.ini</CheckName>
<RefValue>TestNet</RefValue>
<CheckValue></CheckValue>
<CheckRemark></CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:\DICOMServer.xml</FirKey>
<SecKey>Timemedical/MPPSDicom/MPPSDicomNodes</SecKey>
<Checkid>5</Checkid>
<CheckName>MPPSDicom-AETitle</CheckName>
<RefValue>LWPACS</RefValue>
<CheckValue></CheckValue>
<CheckRemark>AETitle</CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:\DICOMServer.xml</FirKey>
<SecKey>Timemedical/MPPSDicom/MPPSDicomNodes</SecKey>
<Checkid>5</Checkid>
<CheckName>MPPSDicom-IPAddress</CheckName>
<RefValue>192.168.1.253</RefValue>
<CheckValue></CheckValue>
<CheckRemark>IPAddress</CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:\DICOMServer.xml</FirKey>
<SecKey>Timemedical/MPPSDicom/MPPSDicomNodes</SecKey>
<Checkid>5</Checkid>
<CheckName>MPPSDicom-PortNo</CheckName>
<RefValue>4443</RefValue>
<CheckValue></CheckValue>
<CheckRemark>PortNo</CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:\DICOMServer.xml</FirKey>
<SecKey>Timemedical/MWLDicom/MWLDicomNote</SecKey>
<Checkid>5</Checkid>
<CheckName>MWL-AETitle</CheckName>
<RefValue>LWPACS</RefValue>
<CheckValue></CheckValue>
<CheckRemark>AETitle</CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:\DICOMServer.xml</FirKey>
<SecKey>Timemedical/MWLDicom/MWLDicomNote</SecKey>
<Checkid>5</Checkid>
<CheckName>MWL-IPAddress</CheckName>
<RefValue>192.168.1.253</RefValue>
<CheckValue></CheckValue>
<CheckRemark>IPAddress</CheckRemark>
</CheckTable> <CheckTable>
<MethodID>OperateEleven</MethodID>
<FirKey>C:\DICOMServer.xml</FirKey>
<SecKey>Timemedical/MWLDicom/MWLDicomNote</SecKey>
<Checkid>5</Checkid>
<CheckName>MWL-PortNo</CheckName>
<RefValue>4443</RefValue>
<CheckValue></CheckValue>
<CheckRemark>PortNo</CheckRemark>
</CheckTable> </Check>
策略模式&反射的更多相关文章
- 过多if - else 的问题, 以及策略模式 + 反射解决方法
策略模式解决if - else 的代码 业务场景: 外包企业的审批人需要审批打卡的场景: 审批人分为多种不同的级别,多种级别中具有方式相同但是内容不同的操作:审批. 原来场景: 有前端传来审批人参数, ...
- 使用反射+策略模式代替项目中大量的switch case判断
我这里的业务场景是根据消息类型将离线消息存入mongoDB不同的collection中.其中就涉及到大量的分支判断,为了增强代码的可读性和可维护性,对之前的代码进行了重构. 先对比一下使用反射+策略模 ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- PHP 策略模式
策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换.本模式使得算法可独立于使用它的客户而变化.策略模式把对象本身和运算规则区分开来,其功能非常强大,因为这个设计模式本身的核心思想 ...
- 【2016-10-14】【坚持学习】【Day5】【策略模式】
今天学了策略模式 例子 一个售票系统,针对不同的用户使用不用的计价方式, 环境类:一个业务场景(电影票累,) 抽象类:计价算法 具体实现类:5折算法,满100减20算法,..... 抽象策略类 abs ...
- 编写自定义的JDBC框架与策略模式
本篇根据上一篇利用数据库的几种元数据来仿造Apache公司的开源DbUtils工具类集合来编写自己的JDBC框架.也就是说在本篇中很大程度上的代码都和DbUtils中相似,学完本篇后即更容易了解DbU ...
- 策略模式Strategy——坐什么车回家?
1.存在的问题和模型 :2014年6月 学校:廊坊师范 家:石家庄 人物:学生 又快到期末考试了.回家的节奏也奔上日程,无聊之余就想想这次回家的事儿. 对我来说回 ...
- CSharp设计模式读书笔记(22):策略模式(学习难度:★☆☆☆☆,使用频率:★★★★☆)
策略模式(Strategy Pattern):定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换,策略模式让算法独立于使用它的客户而变化,也称为政策模式(Policy). 模式角色与结构: ...
- 设计模式-策略模式Strategy以及消灭if else
概述 如果在开发过程中,出现大量的if else或者switch case 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...
随机推荐
- Google Chrome浏览器调试
作为Web开发人员,我为什么喜欢Google Chrome浏览器 [原文地址:http://www.cnblogs.com/QLeelulu/archive/2011/08/28/2156402.ht ...
- vue 常用功能和命令
1. vue-cli 构建项目 # 全局安装 vue-cli $ npm install --global vue-clif # 创建一个基于 webpack 模板的新项目 $ vue init we ...
- webstorm下开发微信小程序
- vue列表排序实现中的this问题
最近在看vue框架的知识,然后其中有个例子中的this的写法让我很疑惑 <!DOCTYPE html> <html> <head> <meta charset ...
- Linux从入门到适应(二):更换清华源
1 进入到/etc/apt文件夹当中,找到sources.list,将其备份.命令:cp -p sources.list sources.list.old 2 采用管理员方式打开sources.lis ...
- 【牛客小白月赛6】 C 桃花 - 树上最长路
题目地址:https://www.nowcoder.com/acm/contest/136/C dfs找出最长路和次长路,将两个结果相加再加上起点即可: #include<iostream> ...
- Buffer.compare()
Buffer.compare(buf1, buf2) buf1 {Buffer} buf2 {Buffer} 返回:{Number} 比较 buf1 和 buf2 通常用于 Buffer 数组的排序目 ...
- sscanf,sprintf
sprintf函数 sprintf函数原型为 int sprintf(char str, const char format, ...).作用是格式化字符串,具体功能如下所示: 将数字变量转换为字符串 ...
- 【Codeforces 231C】To Add or Not to Add
[链接] 我是链接,点我呀:) [题意] 题意 [题解] 把数组排个序, 显然优先用大的且小于枚举的数字a[i]的数字变成a[i] 那么肯定有一个范围j. 然后a[j~i-1]都能在k花费以内变成a[ ...
- 贪心算法求解活动安排<算法分析>
一.实验内容及要求 1.要求按贪心算法原理求解问题: 2.要求手工输入s[10]及f[10],其中注意自己判断s[i]<f[i]: 3.要求显示所有活动及最优活动安排的i事件列表.二.实验步骤 ...