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

问题描述

工厂模式抽象出共同的方法,继承接口,反射出对象,执行方法策略模式,抽象出共同的方法,继承接口,context传递继承的类,调用继承类的方法怎么感觉好像啊?为什么会区分成2种设计模式?应用场景的区别是什么?

解决方案

解决方案二:
楼主在哪里知道的这些名词?这些名词能帮你解决什么问题?
解决方案三:
工厂解决的是创建的过程策略解决的是动作更具体的说,工厂是要解决如何创建某个对象,重点在于对象,而策略不关心你对象是怎么创建的,它只关心你传入的对象,它需要用这个对象来解决问题,重点在于解决所以你完全可以用工厂创建对象,然后这个对象作为策略需要的参数
解决方案四:
如果你用.net中的直截了当的术语,根本不需要太多忽悠了。比如说,对象实例是可以动态创建的,例如其本质原型为Dictionary<string,Type>db;stringname;//....vart=(fromxindbwherex.Key==nameselectx.Value).First();varinstance=Activator.CreateInstance(t);

或者比如说,委托实例是可以动态调用的,例如其原型实例为Dictionary<string,Func<int,string>>db;stringname;//....varf=(fromxindbwherex.Key==nameselectx.Value).First();varresult=f(1234);

你可以把这些知识用到需要动态查表去创建不同类型对象或者调用预先注册的委托函数的地方,例如通过配置文件来决定运行时反射执行一些操作。《设计模式》那本书写的年代比较古老,加之作者最初是针对java的,所以技术术语非常贫乏。他们当时还不太懂什么叫做“事件、委托、反射、依赖倒置”等等术语,也没有比较高级一点的编程“语法糖”来让代码写得精简。例如c#中对于Delegate就是个语法糖,编译器自动产生复杂的类型代码、自动实现Invoke等等接口定义方法,但是编程者只用直截了当地一条代码来书写,理解上也容易。而GOF全都用比较雷人的字眼儿来命名了那些模式,也用比较雷人的代码来写那些接口和类型,所以程序员可以用来消磨时光。实际上23种模式,最多有5种就够了。
解决方案五:
引用3楼sp1234_maJia的回复:

如果你用.net中的直截了当的术语,根本不需要太多忽悠了。比如说,对象实例是可以动态创建的,例如其本质原型为Dictionary<string,Type>db;stringname;//....vart=(fromxindbwherex.Key==nameselectx.Value).First();varinstance=Activator.CreateInstance(t);

或者比如说,委托实例是可以动态调用的,例如其原型实例为Dictionary<string,Func<int,string>>db;stringname;//....varf=(fromxindbwherex.Key==nameselectx.Value).First();varresult=f(1234);

你可以把这些知识用到需要动态查表去创建不同类型对象或者调用预先注册的委托函数的地方,例如通过配置文件来决定运行时反射执行一些操作。《设计模式》那本书写的年代比较古老,加之作者最初是针对java的,所以技术术语非常贫乏。他们当时还不太懂什么叫做“事件、委托、反射、依赖倒置”等等术语,也没有比较高级一点的编程“语法糖”来让代码写得精简。例如c#中对于Delegate就是个语法糖,编译器自动产生复杂的类型代码、自动实现Invoke等等接口定义方法,但是编程者只用直截了当地一条代码来书写,理解上也容易。而GOF全都用比较雷人的字眼儿来命名了那些模式,也用比较雷人的代码来写那些接口和类型,所以程序员可以用来消磨时光。实际上23种模式,最多有5种就够了。

想补充一下基础知识,所以在看设计模式,不过不去了解原理,只依靠语法糖好吗?另外请教一下,您认为哪5种就够了?引用1楼jhdxhj的回复:

楼主在哪里知道的这些名词?这些名词能帮你解决什么问题?

我在补充基础知识和整理思路引用2楼starfd的回复:

工厂解决的是创建的过程策略解决的是动作更具体的说,工厂是要解决如何创建某个对象,重点在于对象,而策略不关心你对象是怎么创建的,它只关心你传入的对象,它需要用这个对象来解决问题,重点在于解决所以你完全可以用工厂创建对象,然后这个对象作为策略需要的参数

您的看法,是这些没有区别?
解决方案六:
设计模式只是对人们编写的代码形态上的总结,并不具指导意义看看设计模式也没什么坏处,起码你会知道:哦,原来这个还可以那么写

时间: 2024-09-22 18:41:14

请问策略模式和工厂模式的区别的相关文章

《java与模式》----创建模式系列工厂模式、单态模式精讲

创建 创建模式-----Creation  Pattern 创建模式是对类实例化过程的抽象. 一些系统在创建对象的时候需要动态的决定怎样创建对象.创建哪些对象.以及如何组合,表示这些对象.创建模式描述了怎样构造和封装这些动态的决定. 创建模式又分类的创建模式和对象的创建模式. l         类的创建模式:类的创建模式使用继承关系,把类的创建延迟到子类,从而封装了客户端将得到哪些具体类的信息,并隐藏了这些类的实例是如何被创建的和放在一起的.. l         对象的创建模式:对象的创建模

php基础设计模式大全(注册树模式、工厂模式、单列模式)_php实例

废话不多说了,先给大家介绍注册树模式然后介绍工厂模式最后给大家介绍单列模式,本文写的很详细,一起来学习吧. php注册树模式 什么是注册树模式? 注册树模式当然也叫注册模式,注册器模式.之所以我在这里矫情一下它的名称,是因为我感觉注册树这个名称更容易让人理解.像前两篇一样,我们这篇依旧是从名字入手.注册树模式通过将对象实例注册到一棵全局的对象树上,需要的时候从对象树上采摘的模式设计方法.   这让我想起了小时候买糖葫芦,卖糖葫芦的将糖葫芦插在一个大的杆子上,人们买的时候就取下来.不同的是,注册树

JavaScript模式之工厂模式(Factory)应用介绍

工厂模式也是对象创建模式之一,它通常在类或类的静态方法中去实现.构造对象的一种方式是使用new操作符,但使用new时正是针对实现编程,会造成"耦合"问题,与具体的类关系紧密.导致代码更脆弱,缺乏弹性,在复杂逻辑的项目中建议是面向接口编程. 先看简单工厂模式 代码如下: Person(name, age) { var obj = {} obj.name = name obj.age = age return obj } var p1 = Person('jack', 25) var p2

JavaScript 模式之工厂模式(Factory)应用介绍_javascript技巧

工厂模式也是对象创建模式之一,它通常在类或类的静态方法中去实现.构造对象的一种方式是使用new操作符,但使用new时正是针对实现编程,会造成"耦合"问题,与具体的类关系紧密.导致代码更脆弱,缺乏弹性,在复杂逻辑的项目中建议是面向接口编程. 先看简单工厂模式 复制代码 代码如下: Person(name, age) { var obj = {} obj.name = name obj.age = age return obj } var p1 = Person('jack', 25) v

OOAD之创建型模式之工厂模式

  首先我们为什么要学习设计模式呢? 1)模式从经验中总结出来的,经过证实的方案,模式只有在实际系统中经过多次验证之后才能成为模式.  2) 提高系统的可维护性, 通过使用设计模式,在系统面临升级和维护时,将把维护成本控制在最低的水平上. 3) 增加表达能力: 设计模式有很强的语言表述性. 设计模式是对解决方案的总结,使得设计模式能够更好的传达和交流,成为开发人员之间的一种共通语言,从而被更多的开发人员使用,反过来促进设计模式的发展和应用. 4)帮助我们更好的进行软件设计. 1 模式的概念:是具

C++设计模式之工厂模式_C 语言

由遇到的问题引出工厂模式 在面向对象系统设计中经常可以遇到以下的两类问题: ◆ 1.为了提高内聚(Cohesion)和松耦合(Coupling),我们经常会抽象出一些类的公共接口以形成抽象基类或者接口.这样我们可以通过声明一个指向基类的指针来指向实际的子类实现,达到了多态的目的.这里很容易出现的一个问题 n 多的子类继承自抽象基类,我们不得不在每次要用到子类的地方就编写诸如 new ×××;的代码.这里带来两个问题: 客户程序员必须知道实际子类的名称(当系统复杂后,命名将是一个很不好处理的问题,

Java设计模式(三—四)----工厂模式

Java设计模式 工厂模式 一.引言 二.分类 三.简单工厂模式 四.工厂方法模式 五.抽象工厂模式 六.和工厂方法模式区别 七.总结 工厂模式 在面向对象编程中, 最通常的方法是一个new操作符产生一个对象实例,new操作符就是用来构造对象实例的.但是在一些情况下, new操作符直接生成对象会带来一些问题.举例来说, 许多类型对象的创造需要一系列的步骤: 你可能需要计算或取得对象的初始设置; 选择生成哪个子对象实例; 或在生成你需要的对象之前必须先生成一些辅助功能的对象.在这些情况,新对象的建

跟屌丝大哥学习设计模式-抽象工厂模式

1.3 抽象工厂(Abstract Factory)模式    抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品具体类型的情况下,创建多个产品族中的产品对象.这就是抽象工厂模式的用意.     每个模式都是针对一定问题的解决方案.抽象工厂模式面对的问题是多产品等级结构的系统设计.     在学习抽象工厂具体实例之前,应该明白两个重要的概念:产品族和产品等级.     产品族:是指位于不同产品等级结构中,功能相关联的产品组成的家族.比如AMD的CPU和ADM芯片的主板,组成一个家族.

工厂模式与抽象工厂模式小览(二)

一.文章来由 就等啦~~还记得工厂模式与抽象工厂模式小览(一)第一部吗?我们在第一部中,分别详细的描述了(1)简单工厂(2)工厂模式(3)抽象工厂模式,但是并没有描述他们之间的关系,也没有比较工厂模式和抽象工厂模式,这对难舍难分的好基友之间的异同点,这些工作我们在第二部中完成~ 二.工厂模式和简单工厂 话说十年前,有一个暴发户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他