频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

.Net中的设计模式——Strategy模式

来源:qqread 作者:佚名 出处:巧巧读书 2008-04-10 进入讨论组
下一页 1 2 3 

一、模式概述

    “面向接口编程”是面向对象编程思想中最重要的一个原则。根据“封装变化”的原理,我们常常将易于变化的部分进行抽象,定义为接口。对于调用者而言,只需要知道接口的外部定义即可,具体的实现则不用理会。

在设计模式中,Strategy模式就是这样的一个“面向接口编程”的最佳体现,它进行抽象的一部分是针对特定的“算法”,或者说是“策略”。
    假设我们要开发一个税务系统,那么有关税务的计算就会依照纳税人的不同而分为个人所得税和企业所得税,而这两种税收类型依法应缴纳的税金在计算方式上是迥然不同的两种策略。此时,我们就可以应用策略模式,将税收策略抽象为接口ITaxStrategy:
    public interface ITaxStrategy
    {
         double Calculate(double income);
    }
    在对税收计算策略完成了抽象后,就从设计上去除了模块间存在的耦合,消除了变化可能会造成的未来系统的大规模修改,而所谓“面向接口编程”正是基于这样的道理。
    定义接口之后,各种税收策略均实现该接口:
    public class PeronalTaxStrategy:ITaxStrategy
    {
    public double Calculate(double income)
        {
         //实现略;
        }
    }
    public class EnterpriseTaxStrategy:ITaxStrategy
    {
    public double Calculate(double income)
        {
         //实现略;
        }
    }
    如果此时有一个公共的类,提供税收的相关操作,其中就包括计算所得税的方法:
    public class TaxOp
    {
    private ITaxStrategy m_strategy;
        public TaxOp(ITaxStrategy strategy)
        {
         this.m_strategy = strategy;
        }
        public double GetTax(double income)
    {
         return strategy.Calculate(income);
        }
    }
    在这个类中,接收了一个ITaxStrategy类型的对象,由于该对象是一个接口类型,因此类TaxOp是与具体税收策略无关的,它们之间因为接口的引入而成为了一个弱依赖的关系,如类图所示:

.Net中的设计模式——Strategy模式(图一)

如果客户端要调用有关税收的操作时,就可以根据纳税人的类型具体实例化税收策略对象:
    public class App
    {
        public static void Main(string[] args)
    {
         TaxOp op = new TaxOp(new PersonalTaxStrategy());
         Console.WriteLine(“The Personal Tax is :{0}”, op.GetTax(1000));
    }
    }

    二、.Net Framework中的Strategy模式

    Stragety模式的应用极为广泛,在.Net Framework中自然不乏应用的例子。例如在.Net中,为集合类型Array和ArrayList提供的排序功能,其实现中就利用了Strategy模式。它是对比较算法进行了封装,定义了IComparer接口。实现IComparer接口的类,可以是顺序,也可以是逆序的比较两个对象的大小。
    此外,在System.Configuration.Provider命名空间中,关于Provider的继承体系下就引入了诸多Strategy模式的应用。在这个命名空间下,主要是定义了一个抽象类ProviderBase,它的定义较为简单,仅仅包括一个初始化的虚方法和几个虚属性,如下代码:

更多文章 更多内容请看.NET移动与嵌入式技术.NET开发手册专题,或进入讨论组讨论。
下一页 1 2 3 
收藏此文】【 】【打印】【关闭
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章