c# – 战略模式 – 正确实施
发布时间:2020-12-16 01:41:15 所属栏目:百科 来源:网络整理
导读:我是第一次使用这种模式,并使用C#. 我只想检查这是否是正确的实现. 我在Winform上有一个按钮,当点击它时会输出一些特定格式的数据,通过从下拉框中选择来定义.现在这可能会在未来发生变化,因此我使用策略模式来封装哪些变化. 我有一个“策略接口”,它只是暴露
我是第一次使用这种模式,并使用C#.
我只想检查这是否是正确的实现. 我有一个“策略接口”,它只是暴露了一种方法:“显示数据()”. 在我的按钮上单击我使用以下代码: private void ConfirmButton_Click(object sender,EventArgs e) { IViewData viewData; switch (outputMedia) { case "Excel": viewData = new ExcelOutput(operation,study); viewData.DisplayData(); break; case "Spotfire": viewData = new SpotfireOutput(operation,study); viewData.DisplayData(); break; } } 这是使用这种模式的可接受方式吗?显然,如果识别出额外的输出媒体,那么我将简单地创建一个新的子类并在switch语句中添加一个额外的“case”. 谢谢. 解决方法
使用策略的正确方法是将IViewData对象的创建与其用法分开.创建本身可能由工厂方法处理.然后你可以在一个单独的位置使用创建的IViewData,它完全没有意识到对象的具体类.
例如. private IViewData CreateViewData() { IViewData viewData; switch (outputMedia) { case "Excel": viewData = new ExcelOutput(operation,study); break; case "Spotfire": viewData = new SpotfireOutput(operation,study); break; } return viewData; } ... private void ConfirmButton_Click(object sender,EventArgs e) { IViewData viewData = CreateViewData(); viewData.DisplayData(); } 现在,通过重构工厂方法,您可以进一步改进解决方案.您可能决定使用Dictionary而不是switch,或者只创建一次视图数据对象并缓存它们,或者(如您所建议的)用依赖注入替换它… (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |