策略模式&反射
业务代码
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 语句,如果这些语句块中的代码并不是包含业务逻辑,只是单纯的分流方法,那么,每一个语句块中都是一个算法或者叫策略. 背景 比如 ...
随机推荐
- Python框架Django的入门
本篇文章主要给大家介绍Django的入门知识:
- B5. Concurrent JVM 锁优化
[概述] 高效并发是从 JDK1.5 到 JDK 1.6 的一个重要改进,HotSpot 虚拟机开发团队在这个版本上花费了大量的精力去实现各种锁优化技术,如适应性自旋(Adaptive Spining ...
- Hadoop架构模型
1.hadoop 1.x架构模型:分布式文件存储系统:HDFSNameNode(主节点:管理元数据) secondaryNameNode(作用是合并元数据信息,辅助NameNode管理元数据信息)Da ...
- android ListView几个比较特别的属性
由于这两天在做listView的东西,所以整理出来一些我个人认为比较特别的属性,通过设置这样的属性可以做出更加美观的列表 首先是stackFromBottom属性,这只该属性之后你做好的列表就会显示你 ...
- Spring接收web请求参数的几种方式
1 查询参数 请求格式:url?参数1=值1&参数2=值2...同时适用于GET和POST方式spring处理查询参数的方法又有几种写法: 方法一:方法参数名即为请求参数名 // 查询参数1 ...
- 集训第五周动态规划 J题 括号匹配
Description We give the following inductive definition of a “regular brackets” sequence: the empty s ...
- BNUOJ 3226 Godfather
Godfather Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on PKU. Original ID: ...
- Android BGABadgeView:显示提示数字(2)
Android BGABadgeView:显示提示数字(2) 在附录文章3的基础上,对代码进行稍微改造,显示在红色小圆球内部显示数字,同时给红色小圆球通过可编程调控红色小圆球的整体外观,布局文件 ...
- ORACLE审计小结
ORACLE审计小结 1.什么是审计 审计(Audit)用于监视用户所执行的数据库操作,并且Oracle会将审计跟踪结果存放到OS文件(默认位置为$ORACLE_BASE/admin/$ORACLE_ ...
- HDU 2442
状态压缩DP , 和HDU2280极其相似 #include <cstdio> #include <cstring> #include <iostream> usi ...