`
smartwgd
  • 浏览: 55437 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

策略模式和工厂模式有啥区别呢?

阅读更多

google的结果:

策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。
简单工厂:将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。
简单工厂严格意义上不是一种设计模式,只能是一种良好的编程习惯。

 

里面还特意说了,(Strategy 适合下列场合: 1.以不同的格式保存文件;)

 

我现在就要做文件的下载,csv xml pdf xls 四种格式。

 

使用工厂模式:

客户端类+工厂类+接口类+4个具体实现类 总共7个类

使用策略模式:

客户端类+调用那个接口的类+工厂类+接口类+4个具体实现类 总共8个类

 

而且也没发现策略比工厂哪里更好一些。。。谁来帮忙解读一下啊?谢谢啦~~

分享到:
评论
8 楼 easion_zms 2009-04-24  
在扩展上:
如果下载的格式加一种doc
那你肯定又要加一个doc的类
但是如果用工厂模式你必须要修改你的工厂方法,加以判断和实例化;
如果用的是策略模式,只需要在客户使用类中直接set进去就好,所以达到了对
增加开放,对修改封闭!
7 楼 elmar 2008-11-21  
<div class='quote_title'>smartwgd 写道</div>
<div class='quote_div'>
<p>简单工厂严格意义上不是一种设计模式,只能是一种良好的编程习惯。</p>
</div>
<p>这句话怎么说?什么叫严格意义上不是设计模式?“严格意义上”的设计模式是什么样的?</p>
<p> </p>
<p>不严格的说,所有的模式,斗不过是一种良好的编程习惯。甚至OO本身也不过如此。</p>
6 楼 elmar 2008-11-21  
<div class='quote_title'>smartwgd 写道</div>
<div class='quote_div'>
<p>google的结果:</p>
<p>策略模式:定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 <br/>
简单工厂:将对象的创建完全独立出来,让对象的创建和具体的使用客户无关。 <br/>
简单工厂严格意义上不是一种设计模式,只能是一种良好的编程习惯。</p>
<p> </p>
<p>里面还特意说了,(Strategy 适合下列场合:
1.以不同的格式保存文件;)</p>
<p> </p>
<p>我现在就要做文件的下载,csv xml pdf xls 四种格式。</p>
<p> </p>
<p>使用工厂模式:</p>
<p>客户端类+工厂类+接口类+4个具体实现类 总共7个类</p>
<p>使用策略模式:</p>
<p>客户端类+调用那个接口的类+工厂类+接口类+4个具体实现类 总共8个类</p>
<p> </p>
<p>而且也没发现策略比工厂哪里更好一些。。。谁来帮忙解读一下啊?谢谢啦~~</p>
</div>
<p>一个可能的实现应该是这样的吧:</p>
<pre name='code' class='java'>class StrageFactory{
       public IOutputStrage produce(string _type){
                balabala
     }
}
interface IOutputStrage {
       public void output(OutputStream ...);
}
class CSVOutput impletes IOutputStrage;
class XMLOutput impletes IOutputStrage;
......

class Downloader{
       public void run(_type){
              ......
              StrageFactory.produce(_type).output(..);
       }
}
</pre>
 
<p> </p>
<p> </p>
5 楼 elmar 2008-11-21  
这个,你可以用工厂生产策略,但是两者不是一回事吧?
4 楼 dennis_zane 2008-11-19  
代码层次上似乎没啥区别,区别在语义和使用场景上。
3 楼 tinyyea 2008-11-19  
你这两个方法有什么区别呢?
差的就是那个“调用那个接口的类”。

方法一与方法二都是用工厂生产策略,有什么实质的区别吗?

方法二只是客户端把调用委托给了另一个类,有时候这是个好的设计,但你真的需要如此吗?

策略模式能和工厂模式区别开来吗?一个注重对象的行为,一个注重对象的创建,有区别的必要吗?
2 楼 smartwgd 2008-11-19  
那还是工厂算了。。。感觉确实都一样。。。
1 楼 repsihWDX 2008-11-19  
都一样 封装变化:)

相关推荐

    抽象工厂模式+工厂方法模式+策略模式+类图实现手机加工厂

    本文将探讨三个重要的设计模式:抽象工厂模式、工厂方法模式以及策略模式,并结合一个实际的场景——手机加工厂,来具体阐述它们的应用。 首先,我们来看**抽象工厂模式**。这个模式主要用于创建相关或依赖对象的...

    简单工厂模式VS策略模式小应用

    今天我们将探讨两种重要的设计模式:简单工厂模式和策略模式。这两种模式都是面向对象设计的核心概念,它们各自有着独特的优势和适用场景。 首先,我们来理解简单工厂模式。简单工厂模式是创建型设计模式的一种,它...

    简单工厂模式和策略模式实现简单排序算法。

    在软件设计模式中,"简单工厂模式"和"策略模式"是两种常用的设计模式,它们在不同的场景下有着各自的优势。本篇文章将探讨如何利用这两种模式实现简单的排序算法,以提高代码的可读性和可扩展性。 首先,简单工厂...

    简单工厂模式、代理模式、策略模式如此相似

    在软件设计模式的世界里,"简单工厂模式"、"代理模式"和"策略模式"都是经典的设计模式,它们各自有着独特的应用场景和优缺点。本文将深入解析这三种模式的原理和区别,帮助读者理解它们在实际开发中的运用。 首先,...

    策略模式结合模板方法模式

    在这种情况下,策略模式可以有三种实现方式:一是在上下文中实现公共功能,让所有具体的策略算法回调这些方法;二是把策略的接口改成抽象类,然后在里面实现具体算法的公共功能;三是给所有的策略算法定义一个抽象的...

    策略模式+工厂模式解决问题demo

    策略模式和工厂模式是两种常见的设计模式,在软件开发中被广泛应用。它们分别解决了不同的问题,但结合使用可以...这些文件对于理解项目结构和开发环境有一定帮助,但主要的编程知识点还是策略模式和工厂模式的运用。

    PHP设计模式实例之(观察者模式、策略模式、简单工厂模式)借鉴.pdf

    简单工厂模式的主要参与者有Factory(工厂)和Product(产品)。在 PHP 中,可以使用静态工厂方法来实现简单工厂模式。 在使用简单工厂模式时,需要注意以下几点: * 需要定义一个工厂接口,用于声明创建对象的...

    利用策略模式和简单工厂模式,实现商场收银软件。 营业员根据所购买商品的单价和数量,向客户收费

    在这个场景中,我们主要关注两种设计模式:策略模式和简单工厂模式。这两种模式都是面向对象设计的重要组成部分,它们在商场收银软件的实现中起到了关键作用。 策略模式允许我们定义一系列算法,并将每个算法封装...

    详解SpringBoot结合策略模式实战套路

    策略模式是一种常用的设计模式,它可以使我们的代码更加灵活、可维护和可扩展。在SpringBoot项目中,策略模式可以与依赖注入机制相结合,实现更加灵活的业务逻辑处理。在本文中,我们将详细介绍如何使用策略模式在...

    策略模式 template模式

    策略模式(Template模式) 策略模式是设计模式中的一种 객체行为型模式,它定义了一系列算法,封装每一个算法,并使它们可以互相替换。策略模式使得算法可以独立于使用它的客户而变化。 概述 在软件开发中,经常...

    js策略模式和代理模式

    策略模式和代理模式是设计模式中的两种常见模式,它们在软件开发中扮演着重要的角色,尤其是在JavaScript中,这两种模式提供了更加灵活和可维护的代码结构。 策略模式(Strategy Pattern)是一种行为设计模式,它...

    设计模式一(单子、工厂、策略模式)练习 .zip

    设计模式一(单子、工厂、策略模式)练习 1. 假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。对所有的教材类图书 实行每本一元的折扣;对连环画类图书提供每本 7%的促销折扣;而对非教材类的计算 机...

    java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂

    在Java中,简单工厂模式、工厂方法模式和抽象工厂模式是三种常见的实现方式。简单工厂模式虽然简单易懂,但扩展性较差,因为它将所有产品类型硬编码在工厂类中。工厂方法模式通过定义创建对象的接口,让子类决定实例...

    设计模式之策略模式源码

    结合这些内容,我们可以深入理解策略模式和简单工厂模式的使用场景和优势: 1. **策略模式**:使得程序在运行时可以动态地切换算法,增强了系统的灵活性和可扩展性。当需要添加新的结算策略时,只需要新增一个策略...

    策略模式在实际项目中的应用二

    策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java中,策略模式通过定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户而变化。这种模式通常用于处理多种...

    策略模式的示例代码和思想模式

    在实际开发中,我们还可以使用工厂模式或者依赖注入框架来动态地选择和创建策略对象,这样可以使代码更加灵活,易于维护和扩展。同时,结合组合模式,我们可以在存储策略中处理不同类型的凭证集合,比如个人凭证和...

    设计模式——策略模式

    在本实验中,我们使用策略模式实现了一个小游戏,游戏中有三个角色:和尚、侠女、忍者,每个角色都有生命值和魔法值,但各角色不同。每个角色具有魔法攻击和物理攻击,物理攻击有三种:用刀、用剑、用手;魔法攻击也...

    Java 设计模式 策略模式

    首先,策略模式的核心是策略接口和实现策略接口的具体策略类。在Java中,我们可以定义一个策略接口,比如`SortingStrategy`,它声明了一组方法,如`sort()`,用于执行特定的排序算法。然后,我们创建几个实现这个...

    设计模式之工厂方法

    此外,工厂方法还可以与其他设计模式结合,如策略模式、单例模式等,以解决更复杂的问题。 总的来说,工厂方法模式是创建型设计模式中的基础,对于理解和掌握其他高级设计模式有着重要的铺垫作用。通过不断地实践和...

Global site tag (gtag.js) - Google Analytics