设计模式学习小结
来源:互联网 发布:cf手游刷钻软件 编辑:程序博客网 时间:2024/05/18 01:02
最近在看Head first设计模式,将一些体会收录于此。
一、策略模式
1、定义:策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,次模式让算法的变化独立于使用算法的客户。
2、本质:少用继承,多用组合
3、设计原则:把应用中变化的地方独立出来,不要和那些不需要变化的代码混在一起。这样代码变化引起的不经意后果变少,系统变得更有弹性。“面向接口编程”是面向对象编程思想中最重要的一个原则。根据“封装变化”的原理,我们常常将易于变化的部分进行抽象,定义为接口。对于调用者而言,只需要知道接口的外部定义即可,具体的实现则不用理会。在设计模式中,Strategy模式就是这样的一个“面向接口编程”的最佳体现,它进行抽象的一部分是针对特定的“算法”,或者说是“策略”。
4、实例如下:
假设我们要开发一个税务系统,那么有关税务的计算就会依照纳税人的不同而分为个人所得税和企业所得税,而这两种税收类型依法应缴纳的税金在计算方式上是迥然不同的两种策略。此时,我们就可以应用策略模式,将税收策略抽象为接口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是与具体税收策略无关的,它们之间因为接口的引入而成为了一个弱依赖的关系,如类图所示:
如果客户端要调用有关税收的操作时,就可以根据纳税人的类型具体实例化税收策略对象:
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));
}
}
参考文献:
1、Head First设计模式
2、http://blog.csdn.net/hank_huang/archive/2006/12/31/1471009.aspx(策略模式实例出处)
- 设计模式学习小结
- GOF设计模式学习小结(一)
- 学习ios MVC设计模式的小结
- 《设计模式之禅》学习小结之六大设计原则
- re: 设计模式学习小结(十三)-Proxy模式
- C#设计模式学习小结之一 工厂模式
- C#设计模式学习小结之二 装饰模式
- C#设计模式学习小结之三 观察者模式
- C#设计模式学习小结之四 状态模式
- C#设计模式学习小结之五 适配器模式
- C#设计模式学习小结之六 外观模式
- C#设计模式学习小结之七 建造者模式
- C#设计模式学习小结之八 模版方法模式
- C#设计模式学习小结之九 原型模式
- C#设计模式学习小结之十 代理模式
- 设计模式小结
- 设计模式简单小结
- [ZZ]设计模式小结
- 用java 操作 oracle 日期类型字段
- outXml innerxml innerText
- ORACLE8i数据库体系结构(说的很不错,全文转载)
- Grails多附件上传----Action篇
- Windows7农行网银页面无法显示问题的解决方法
- 设计模式学习小结
- 通过进程ID或进程名,获得创建进程的信息(PerformanceCounter)
- 看C# 第四章 复习基础知识
- 2010年4月13日(新公司入职,第二周星期二)
- PDF自动改名的Python程序
- (转)中小IT企业项目团队人员配置管理
- 一名合格的Team Lead应该具备的素质
- MySQL数据类型总结
- 问题