请问策略模式和工厂模式的区别

ayun00 2016-05-23 11:04:19
工厂模式 抽象出共同的方法, 继承接口 , 反射出对象 ,执行方法

策略模式, 抽象出共同的方法, 继承接口 , context 传递 继承的类, 调用继承类的方法

怎么感觉好像啊?

为什么会区分成2种设计模式?

应用场景的区别是什么?
...全文
364 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhdxhj 2016-05-23
  • 打赏
  • 举报
回复
楼主在哪里知道的这些名词?这些名词能帮你解决什么问题?
xuzuning 2016-05-23
  • 打赏
  • 举报
回复
设计模式只是对人们编写的代码形态上的总结,并不具指导意义 看看设计模式也没什么坏处,起码你会知道:哦,原来这个还可以那么写
ayun00 2016-05-23
  • 打赏
  • 举报
回复
引用 3 楼 sp1234_maJia 的回复:
如果你用 .net 中的直截了当的术语,根本不需要太多忽悠了。 比如说,对象实例是可以动态创建的,例如其本质原型为
Dictionary<string, Type> db;
string name;
//....
var t = (from x in db where x.Key == name select x.Value).First();
var instance = Activator.CreateInstance(t);
或者比如说,委托实例是可以动态调用的,例如其原型实例为
Dictionary<string, Func<int, string>> db;
string name;
//....
var f = (from x in db where x.Key == name select x.Value).First();
var result = f(1234);
你可以把这些知识用到需要动态查表去创建不同类型对象或者调用预先注册的委托函数的地方,例如通过配置文件来决定运行时反射执行一些操作。 《设计模式》那本书写的年代比较古老,加之作者最初是针对java 的,所以技术术语非常贫乏。他们当时还不太懂什么叫做“事件、委托、反射、依赖倒置”等等术语,也没有比较高级一点的编程“语法糖”来让代码写得精简。例如 c# 中对于 Delegate 就是个语法糖,编译器自动产生复杂的类型代码、自动实现 Invoke 等等接口定义方法,但是编程者只用直截了当地一条代码来书写,理解上也容易。而 GOF 全都用比较雷人的字眼儿来命名了那些模式,也用比较雷人的代码来写那些接口和类型,所以程序员可以用来消磨时光。 实际上 23 种模式,最多有5种就够了。
想补充一下基础知识,所以在看 设计模式 , 不过不去了解原理, 只依靠语法糖 好吗? 另外请教一下 ,您认为哪5种就够了?
引用 1 楼 jhdxhj 的回复:
楼主在哪里知道的这些名词?这些名词能帮你解决什么问题?
我在补充基础知识和整理思路
引用 2 楼 starfd 的回复:
工厂解决的是创建的过程 策略解决的是动作 更具体的说,工厂是要解决如何创建某个对象,重点在于对象,而策略不关心你对象是怎么创建的,它只关心你传入的对象,它需要用这个对象来解决问题,重点在于解决 所以你完全可以用工厂创建对象,然后这个对象作为策略需要的参数
您的看法, 是 这些没有区别?
sp1234_maJia 2016-05-23
  • 打赏
  • 举报
回复
如果你用 .net 中的直截了当的术语,根本不需要太多忽悠了。 比如说,对象实例是可以动态创建的,例如其本质原型为
Dictionary<string, Type> db;
string name;
//....
var t = (from x in db where x.Key == name select x.Value).First();
var instance = Activator.CreateInstance(t);
或者比如说,委托实例是可以动态调用的,例如其原型实例为
Dictionary<string, Func<int, string>> db;
string name;
//....
var f = (from x in db where x.Key == name select x.Value).First();
var result = f(1234);
你可以把这些知识用到需要动态查表去创建不同类型对象或者调用预先注册的委托函数的地方,例如通过配置文件来决定运行时反射执行一些操作。 《设计模式》那本书写的年代比较古老,加之作者最初是针对java 的,所以技术术语非常贫乏。他们当时还不太懂什么叫做“事件、委托、反射、依赖倒置”等等术语,也没有比较高级一点的编程“语法糖”来让代码写得精简。例如 c# 中对于 Delegate 就是个语法糖,编译器自动产生复杂的类型代码、自动实现 Invoke 等等接口定义方法,但是编程者只用直截了当地一条代码来书写,理解上也容易。而 GOF 全都用比较雷人的字眼儿来命名了那些模式,也用比较雷人的代码来写那些接口和类型,所以程序员可以用来消磨时光。 实际上 23 种模式,最多有5种就够了。
  • 打赏
  • 举报
回复
工厂解决的是创建的过程 策略解决的是动作 更具体的说,工厂是要解决如何创建某个对象,重点在于对象,而策略不关心你对象是怎么创建的,它只关心你传入的对象,它需要用这个对象来解决问题,重点在于解决 所以你完全可以用工厂创建对象,然后这个对象作为策略需要的参数

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧