.NET责任链模式(混合单例模式,模板方法模式)-----制作与扩展能力验证
2014-05-25 00:17
330 查看
.NET责任链模式、单例模式、模板方法模式混用
前言
哇,看到题目挺长的,这个组合型的东西,到底能干啥呢?本篇文章来一起琢磨琢磨,这两天为了团队的软件赶工,我负责的那一块叫:插件管理器。我们团队的成员用的语言还是挺分散的,本人C#,队长VB.NET,还有其他成员写易语言等,系统的功能插件是我们分开写的,各自用各自的喜欢的语言写各个功能模块的插件,最后用我开发的插件管理器把所有的插件整合到一起。这让我很头疼啊,一个C#版的插件,一个VB.NET版的插件,一个易语言的插件,如果有新成员加入,又来个Python版的插件,叫我如何是好。最普通、最烂的处理方法就是:写很多版本的读取器,然后使用if来根据插件语言使用对应该版本的读取器读取信息,哇,这如果来十几种语言,岂不是坑爹。可能有人会说:引入Kernel32能解决非.NET语言的插件读取吧。确实目前使用了这种方案,能兼容易语言,.NET语言就使用.NET的插件Dll读取方式,但是还不确定Kernel32能不能解决任何语言的插件。所以为了让自己有个后路,我结合题目所说的三种设计模式,写了一个模板,下面看这个模板能干嘛,为什么要这样用。如果有地方使用得不恰当的,希望各位朋友们强拍,我会努力学习改正,如果觉得可以的,点个推荐,谢谢~框架展示与说明
class Programe { public static void Main(string[] args) { IPluginAnalyzerable dotnetAnalyzer=ComponentAnalyzer.GetInstance(); Console.WriteLine("输入Q退出"); while(true) { Plugin plugin = RandomPlugin(); dotnetAnalyzer.Analyze(plugin); if (Console.ReadLine().ToUpper() == "Q") { break; } } } private static Plugin RandomPlugin() { Random random = new Random(); PluginType type = (PluginType)random.Next(0, 2); String plaginPath = Path.GetRandomFileName(); Plugin result = new Plugin(type, plaginPath); return result; } }
View Code
测试结果:
看,以一致的方式执行,但是会得到不一样的效果,责任被推到合适的地方做出相应的处理。
到这里有人会说,那如何证明该模型的扩展性?? 好,下面我扩展一种语言读取器,看我改了多少,对系统影响了多少?
扩展性测试
我以Ruby为例。
1.在PluginType中添加一个枚举内容Ruby:
。
2.添加一个Ruby读取器:
3.在ComponentAnalyzer(前面说的包装器)中,把该读取器添加到链条上!
为了测试,在客户端代码中修改Random随机生成数,使其能生成3,大功告成!(这是测试相关,我们没有修改实际客户端任何代码)
顺利扩展!!!我们修改的只是上层的代码,对于底层,也提供了扩展点,符合对修改封闭,对扩展开放。
总结
完成了,大家也累了,希望有不对的地方大家大力拍,面向组合编程,面向接口编程,不要面向具体实现类编程,这是我学习设计模式感受最深的一句话。谢谢大家观看。下面提供完整源码。
完整Demo下载
相关文章推荐
- [Quick-x]制作新手引导高亮区域方法之一:混合模式
- 模板方法设计模式扩展(Hook Method)
- [Quick-x]制作新手引导高亮区域方法之一:混合模式
- 制作与扩展能力验证
- 《模式——工程化实现及扩展》(设计模式C# 版)《模板方法模式 Template》——“自我检验" 参考答案
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
- JAVA之旅(七)——final关键字 , 抽象类abstract,模板方法模式,接口interface,implements,特点,扩展
- 《模式——工程化实现及扩展》(设计模式C# 版)《模板方法模式 Template》——“自我检验"
- 制作新手引导高亮区域方法之一:混合模式
- 连接两个模板方法模式?
- 模板方法模式实现探讨
- 前台验证特殊字符的制作方法
- 深入浅出Java模式设计之模板方法模式
- 乐在其中设计模式(C#) - 模板方法模式(Template Method Pattern)
- 《设计模式精解》学习笔记(十四)------Template Method(模板方法)模式
- 设计模式学习笔记(二十四)——Template Method模板方法
- 第六个设计模式:模板方法
- C++主题——Template Method(模板方法)模式
- 模板方法模式(Template Method Pattern)
- 模板方法模式(Template Mothod Pattern)