设计模式之间可以相互"功能替换"吗?
2008-04-25 10:28
197 查看
有朋友看了我这篇文章后说模式并不存在相互转换,因为它们有不同的应用背景,我认为用转换的确不妥,那就改用功能替换吧,就是说一个功能的实现并不局限于一种模式.
在上一篇实际项目中的策略模式应用中,我分析了一下实际项目中如何应用策略模式,我们知道设计模式有二十多种,是不是在一个实现方法上只能唯一使用一种模式呢?它们之间是否有共同点,或者说它们之间是不是可以转换呢?
在这篇文章中我还是继续上一篇的项目来说一下策略模式有没有可能和工厂模式相互转换,知道设计模式的朋友一定知道,工厂模式在设计模式当中的应用应该来说是最多的,因为它是很多模式的基础.
策略模式的类图如下:
public interface IExporter
public class FactoryDAL
[/b]
根据不同的导出类型实现的具体类如下:
cs:
我只是想说明下工厂模式和其它模式的关系,也并不是说此种转换一定实用于实际项目,这还是要实际情况实际分析,不同的模式有不同的好处,只要能够解决问题就是好方法,古人云:条条大道通罗马.在模式的应用中我们一般是主张利用组合,少用继承,可以将多种模式结合起来用,这样可以扬长补短.
注:本文参考了下面文章:http://baike.baidu.com/view/1227908.htm
在上一篇实际项目中的策略模式应用中,我分析了一下实际项目中如何应用策略模式,我们知道设计模式有二十多种,是不是在一个实现方法上只能唯一使用一种模式呢?它们之间是否有共同点,或者说它们之间是不是可以转换呢?
在这篇文章中我还是继续上一篇的项目来说一下策略模式有没有可能和工厂模式相互转换,知道设计模式的朋友一定知道,工厂模式在设计模式当中的应用应该来说是最多的,因为它是很多模式的基础.
策略模式的类图如下:
public interface IExporter
public class FactoryDAL
[/b]
根据不同的导出类型实现的具体类如下:
public class ExcelExporter:IExporter public class PdfExporter : IExporter public class WordExporter:IExporter <asp:DropDownList ID="DropDownList1" runat="server"> <asp:ListItem Selected="True" Value="pdf">pdf导出</asp:ListItem> <asp:ListItem Value="word">word导出</asp:ListItem> <asp:ListItem Value="excel">excel导出</asp:ListItem> </asp:DropDownList> <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="导出" />
cs:
protected void Button1_Click(object sender, EventArgs e) { IExporter EX = FactoryDAL.createInstance(this.DropDownList1.SelectedValue.ToString().Trim()); Response.Write(EX.ExportTypeName); }
我只是想说明下工厂模式和其它模式的关系,也并不是说此种转换一定实用于实际项目,这还是要实际情况实际分析,不同的模式有不同的好处,只要能够解决问题就是好方法,古人云:条条大道通罗马.在模式的应用中我们一般是主张利用组合,少用继承,可以将多种模式结合起来用,这样可以扬长补短.
注:本文参考了下面文章:http://baike.baidu.com/view/1227908.htm
相关文章推荐
- 基本上,把switch,用设计模式代替,肯定是bug和过度设计。想想,本来修改一个文件几行代码可以解决的问题,变成修改3-6个类才能实现一样的功能。不是傻是什么?
- 对于设计模式之间的选择,可以这样考虑
- Android中设计模式--状态模式(将动作委托到当前状态,状态之间可以互相转换)
- 为什么都要鄙视 PHP 程序员? Java联盟 百家号 07-24 21:43 前几天发表了一篇文章《图解:程序员之间是如何相互鄙视的?》,有人就在留言处留言。 可以解释下:为什么都鄙视PHP工程师
- 设计一个可以获取最小值功能的栈
- 构架、框架、设计模式之间的关系简述
- 设计模式之间的关系图
- 设计模式漫谈(1):Factory Method可以用static实现吗?
- (随记三)Android设计模式解析与实战_面对对象六大原则之里式替换原则
- 构架、框架、设计模式之间的关系简述
- 构架、框架、设计模式之间的关系简述
- 装饰设计模式和继承之间的区别
- 【架构师之路】-【01设计模式】-01对象之间关系
- 架构、框架、设计模式三者之间的关系
- RememberSet记忆集设计模式可以实现增量的读取
- 设计模式observer在ajax中的一个应用,解决页面onload函数同一时间只有一个可以用
- 模块管理常规功能自定义系统的设计与实现(29--多个模块之间的关联[5])
- 【原创】可以在两个select之间相互跳转的选框,适合做权限管理用
- 设计模式:利用Command模式实现无限次数的Undo/Redo功能
- C语言中两个相同类型的结构体变量之间是可以相互直接赋值的