`

请您先登录,才能继续操作

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

阅读更多
工厂模式是创建型模式
策略模式是行为性模式
一个关注对象创建
一个关注行为的封装
策略模式就是定义一系列的算法,这些算法可以在需要的时候替换和扩展.工厂模式是生成型的模式,在你需要的时候构建具体的实例.

在下面的情况下应当考虑使用策略模式:
1. 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
2. 一个系统需要动态地在几种算法中选择一种。那么这些算法可以包装到一个个的具体算法类里面,而这些具体算法类都是一个抽象算法类的子类。换言之,这些具体算法类均有统一的接口,由于多态性原则,客户端可以选择使用任何一个具体算法类,并只持有一个数据类型是抽象算法类的对象。
3. 一个系统的算法使用的数据不可以让客户端知道。策略模式可以避免让客户端涉及到不必要接触到的复杂的和只与算法有关的数据。
4. 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。此时,使用策略模式,把这些行为转移到相应的具体策略类里面,就可以避免使用难以维护的多重条件选择语句,并体现面向对象设计的概念。

策略模式的优点和缺点
策略模式有很多优点和缺点。它的优点有:
1. 策略模式提供了管理相关的算法族的办法。策略类的等级结构定义了一个算法或行为族。恰当使用继承可以把公共的代码移到父类里面,从而避免重复的代码。
2. 策略模式提供了可以替换继承关系的办法。继承可以处理多种算法或行为。如果不是用策略模式,那么使用算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。但是,这样一来算法或行为的使用者就和算法或行为本身混在一起。决定使用哪一种算法或采取哪一种行为的逻辑就和算法或行为的逻辑混合在一起,从而不可能再独立演化。继承使得动态改变算法或行为变得不可能。
3. 使用策略模式可以避免使用多重条件转移语句。多重转移语句不易维护,它把采取哪一种算法或采取哪一种行为的逻辑与算法或行为的逻辑混合在一起,统统列在一个多重转移语句里面,比使用继承的办法还要原始和落后。
策略模式的缺点有:
1. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
2. 策略模式造成很多的策略类。有时候可以通过把依赖于环境的状态保存到客户端里面,而将策略类设计成可共享的,这样策略类实例可以被不同客户端使用。换言之,可以使用享元模式来减少对象的数量。

策略模式与很多其它的模式都有着广泛的联系。Strategy很容易和Bridge模式相混淆。虽然它们结构很相似,但它们却是为解决不同的问题而设计的。Strategy模式注重于算法的封装,而Bridge模式注重于分离抽象和实现,为一个抽象体系提供不同的实现。Bridge模式与Strategy模式都很好的体现了"Favor composite over inheritance"的观点。
分享到:
评论

相关推荐

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

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

    工厂模式和策略模式

    在软件设计模式的世界里,"工厂模式"和"策略模式"是两种常用的设计模式,它们在构建可扩展和可维护的代码中起着至关重要的作用。让我们深入探讨这两种模式及其在实际开发中的应用。 首先,工厂模式是一种创建型设计...

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

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

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

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

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

    本案例主要探讨了三种经典的设计模式:抽象工厂模式、工厂方法模式和策略模式,并以手机加工厂为实际应用场景进行阐述。 首先,**抽象工厂模式**是创建型设计模式之一,它提供一个接口,用于创建相关或依赖对象的...

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

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

    策略模式工厂方法模式观察者模式

    通过阅读这些学习资料,你将能更好地理解如何在实际项目中运用策略模式、工厂方法模式和观察者模式,提升自己的编程技能和设计能力。记住,设计模式是为了解决问题,而不是为了模式本身,所以理解其背后的意图和应用...

    java设计模式之策略模式与模板模式

    本篇文章将深入探讨两种重要的设计模式:策略模式和模板模式。通过理解这两种模式,开发者可以更好地组织代码,提高代码的灵活性和可扩展性。 ### 策略模式 策略模式是一种行为设计模式,它使你能在运行时改变对象...

    远程抄表与监控仿真系统(Version 1.5,采用策略模式、工厂模式、模板方法模式实现)

    处理层的设计采用了设计模式中的策略模式、模板方法模式和工厂模式。 Server端和Client端的实现也采用了分层的设计方式,包含自定义的模型层、视图层和控制层。 说明:程序采用配置文件的方式进行初始化,运行时时请...

    Spring下使用策略模式

    总结来说,Spring下的策略模式是实现灵活、可扩展性的关键,通过Bean工厂和依赖注入机制,我们可以轻松地在运行时切换策略,适应多变的需求。同时,结合源码学习能进一步提升对Spring框架的理解。

    观察者模式和策略模式举例

    观察者模式和策略模式是软件设计模式中的两种重要概念,它们在解决特定问题时能提供高效、灵活的解决方案。设计模式是一种在特定情况下解决问题的通用、可重用的解决方案,是经验丰富的软件开发者们智慧的结晶。 ...

    设计模式之策略模式,商场收银,封装算法

    总结起来,策略模式和封装算法在商场收银场景中的结合,提供了灵活的折扣策略管理方式,使得系统能够根据业务需求快速适应变化,同时也降低了代码的复杂性和维护成本。通过实践和理解这种设计模式,开发者能够提升...

    python 项目里常用的设计模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式 简单工厂 建造者模式 模板模式

    python 项目里常用的设计模式 单例模式 组合模式 策略模式 抽象工厂 代理模式 工厂模式 观察者模式简单工厂 建造者模式 模板模式 桥接多维度 桥接模式 适配器模式 外观模式 享元模式 责任链组合模式

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

    策略模式的主要参与者有Strategy(算法接口)和Context(上下文)。在 PHP 中,可以使用抽象类和接口来实现策略模式。 在给定的代码中,Strategy 抽象类定义了 AlgorithmInterface 方法,用于声明算法接口。...

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

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

    设计模式之策略模式源码

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

    Java策略模式的使用(枚举策略与简单工厂策略)

    后端同学在开发过程中,势必会遇到多条件判断的情况,大部分时候都会直接采用if-else的形式去处理,这样的操作会存在不易扩展的问题,那么...对比枚举策略与简单工厂+策略模式的不同使用,抛砖引玉,引发你更多的思考

    策略模式代码实现

    在给定的“策略模式代码实现”中,我们可能看到的是一个Visual Studio 2008(VS2008)工程源码,它提供了策略模式的示例。`template_test.sln`是Visual Studio的解决方案文件,包含了项目的所有配置信息。而`...

    设计模式之单件模式、工厂模式、策略模式、观察者模式(php描述)(资料整理)

    本文将深入探讨四种常见的设计模式:单件模式(Singleton)、工厂模式(Factory)、策略模式(Strategy)和观察者模式(Observer),并以PHP语言为背景进行解释。 首先,我们来看单件模式。单件模式确保一个类只有...

Global site tag (gtag.js) - Google Analytics