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

flytomylife1 2011-04-29 02:24:54
请问一下工厂模式和策略模式的区别:
工厂模式返回是不是就是一个子类对象?然后策略模式是在内部生成子类对象,并且在内部进行计算,然后返回计算后的结果呢? 先谢谢大家了 呵呵

见书上有个例子说是: 对于加减乘除的运算,有个父类Operation
然后四个子类,OperationAdd,OperationSub ……都集成了Operation父类
想请问下大家:
工厂模式下的工厂类中,是不是根据运算符的不同而返回相应的Operation子类呢?
策略模式下的Context类中,是不是根据运算符的不同,在类内部生成相应的对象,并计算,然后返回的是计算结果呢?
public abstract class Operation
{
private string strNum1;
private string strNum2;
public string StrNum2
{
set
{
strNum2 = value;
}
get
{
return strNum2;
}
}
public string StrNum1
{
set
{
strNum1 = value;
}
get
{
return strNum1;
}
}

public abstract string operate();
}
...全文
397 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
昵称很不好取 2011-05-23
  • 打赏
  • 举报
回复
工厂模式是生产类的实例对象的,属于创建型模式
策略模式是把解决问题的方法封装成类,然后用超类引用具体类,根据需要使用具体的类,属于行为型模式
yfk 2011-05-01
  • 打赏
  • 举报
回复
工厂模式-创建型
策略模式-行为型
横向并没有很好的可比性
但是,都使用了委托的思想
工厂模式使用委托了封装了产品
策略模式则使用了委托封装了行为变化

LZ的例子
策略模式的思想,用委托封装操作符行为的变化
工厂模式,委托操作基类,以构建具体操作对象。
ImN1 2011-04-30
  • 打赏
  • 举报
回复
工厂模式应该说是抽象工厂模式,基本上从new就决定了不同的执行过程
例如抽象数据库类,然后子类mysql/sql/oracle...你选哪个就已经走向不同的分支

工厂方法模式,各个子类都有相同的方法(继承父类),但方法里面的执行内容不同,产生不同结果

策略模式并不是从一开始就决定不同的子类,而是先要判断传入的参数,按参数的走向决定采用哪个子类


所以
工厂模式属于“创建型”,new对象基本就决定
策略模式属于“行为型”,参数决定

前者无参数,或者参数不可判断,例如你无法判断一条SQL语句是mysql还是sql server用的
后者传入参数可以很不同,例如传入数字、字串、数组,自判断就可能产生不同的流程控制
云瑀 2011-04-30
  • 打赏
  • 举报
回复
工厂顾名思义就是生产产品用的
生成模式的一种,通常用来创建类
策略模式是行为模式的一种
指的是某个类有某种行为,在不同场景,有不同的实现算法

分开来看的话根本是不相干的东西,无法区别

混合看的话,可以建立一个策略工厂,生成不同的场景策略

3,409

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 设计模式
社区管理员
  • 设计模式
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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