设计模式学习实践---策略模式(Strategy Pattern)

简介:

   看<<Head First设计模式>>有一段时间了,感觉总是这样看的话收获并不多,由于并没有在实践中应用所以才会比较枯燥,容易看了就忘.并没有实际掌握.就象以前看其它的设计模式的书一样,看了就只是看了,最后回忆起来只是几个模式的大致样子.所以从今天开始打算结合在开发过程中遇到的相应的模式,记录下来,深入理解.
      声明一下:只能保证原创和认真思考.不敢保证质量和水平,但求能够给看的人带来收获.
      策略模式(Strategy Pattern)属于对象行为型模式,体现了两个非常基本的面向对象设计的基本原则:封装变化的概念;编程中使用接口,而不是对接口实现。

定义:
         定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。每一个算法封装到具有共同接口的独立的类中,策略模式使这些算法在客户端调用它们的时候能够互不影响地变化。
结构:
 
  应用:
  在asp.net的分层的框架开发中,经常需要在某一层使用和另外一个层次相关的东西,这样造成了耦合,对应用程度的扩展性造成了影响.前段时间在开发产品的时候,在业务层经常需要获取或者是保存当前用户信息的操作,这样的操作如果在Controller层的话还好,在业务层就有些头疼.毕竟整个产品框架是想业务层不能局限于WebFrom,存储方式也不能局限于Session,Cookie或者是静态变量.( 注:遇到这样的问题,最好是先考虑了是不是设计出了问题).
NewOrder
一开始我们用了一个看起来很笨的方法,那就是传递UserID到业务层,但是这也造成了业务层很乱了,因为几乎每个业务方法都需要有个UserID参数...
NewOrder

      要解决的重点就是要把对用户操作和具体的应用环境解耦,并且又不要对应用程序造成比较大的修改和影响.策略模式的解决方案:(此解决方案源自spring.net)
   
      在IThreadStorage中定义了操作数据的接口(抽象策略对象),会有三个具体的实现CallContextStorage, HybridContextStorage和ThreadStaticStorage(具体策略对象),他们采用不同的方式来实现实现了接口.在LogicalThreadContext(环境对象)中,只引用抽象接口来完成对数据的操作.具体的实现方式对外面是封闭的.我们在开发中在LogicalThreadContext里直接创建了使用的具体策略对象,其实这里可以根据需要做成可配置,或者是利用ioc来实现更灵活些.
     代码实现:

IThreadStorage.cs

 

CallContextStorage.cs


  

LogicalThreadContext.cs

    这样,我们在Application_BeginRequest方法中记录当前用户,然后在业务层的一个方法里,获取当前用户:

Application_BeginRequest

    

BaseManager


    其它的两个实现和类图(及enterprise architect文件),请下载

分类: .NET

本文转自孤独侠客博客园博客,原文链接:http://www.cnblogs.com/lonely7345/archive/2008/10/20/1315190.html,如需转载请自行联系原作者
目录
相关文章
|
4天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
18 2
|
16天前
|
设计模式 API 持续交付
深入理解微服务架构:设计模式与实践
【10月更文挑战第19天】介绍了微服务架构的核心概念、设计模式及最佳实践。文章详细探讨了微服务的独立性、轻量级通信和业务能力,并介绍了聚合器、链式和发布/订阅等设计模式。同时,文章还分享了实施微服务的最佳实践,如定义清晰的服务边界、使用API网关和服务发现机制,以及面临的挑战和职业心得。
|
25天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
27 3
|
26天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
27 2
|
27天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
59 3
|
27天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
28 1
|
18天前
|
设计模式 开发者 Python
Python编程中的设计模式应用与实践###
【10月更文挑战第18天】 本文深入探讨了Python编程中设计模式的应用与实践,通过简洁明了的语言和生动的实例,揭示了设计模式在提升代码可维护性、可扩展性和重用性方面的关键作用。文章首先概述了设计模式的基本概念和重要性,随后详细解析了几种常用的设计模式,如单例模式、工厂模式、观察者模式等,在Python中的具体实现方式,并通过对比分析,展示了设计模式如何优化代码结构,增强系统的灵活性和健壮性。此外,文章还提供了实用的建议和最佳实践,帮助读者在实际项目中有效运用设计模式。 ###
11 0
|
23天前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
|
24天前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第12天】 在软件开发的世界中,设计模式是解决常见问题的最佳实践。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理运用设计模式可以极大地提高代码的可维护性、扩展性和复用性。本文将深入探讨策略模式(Strategy Pattern)的原理、实现方式及其在PHP中的应用。通过具体示例,我们将展示如何利用策略模式来解耦算法与对象,从而让代码更加灵活和易于管理。
16 0
|
24天前
|
设计模式 存储 安全
PHP中的设计模式:单例模式的深入解析与实践
在PHP开发中,设计模式是提高代码可维护性、扩展性和重用性的关键技术之一。本文将深入探讨单例模式(Singleton Pattern)的原理、实现方式及其在PHP中的应用,同时通过实例展示如何在具体的项目场景中有效利用单例模式来管理和组织对象,确保全局唯一性的实现和最佳实践。