您的位置:首页 > 其它

策略模式(Header-First笔记)

2011-07-20 17:36 99 查看
个人网站www.itiask.com 专业问答网站,基于我记录框架开发

策略模式和设计原则(主要是自己的笔记:水平较低,请勿语言攻击)

如果想理解的深入建议深入的读读headfirst,这个真有用,如果只是随便看看,其实是学不到啥东西的。

本文包括两部分(1.Petshop中策略模式的应用、2.控制台小应用程序)

1.Petshop中策略模式的应用

至于在程序中的应用,我也是个新手,不知道何时需要这种模式,可以参考下petshop中的策略模式,理解下在真实项目中如何使用。我对petshop中策略模式的理解就是里面处理订单时可能有同步和异步插入数据两种方式,具体用那种方式直接在配置文件中修改即可。看文字不如看图片,自己画了画UML图,不会用工具但是意思差不多。

View Code

///<summary>
/// 鸭子超类
///</summary>
publicabstractclass Duck
{
IFly fly ;
IQuack quack;
publicvoid SetFly(IFly fly)
{
this.fly = fly;
}
publicvoid SetQuack(IQuack quack)
{
this.quack = quack;
}

publicabstractvoid Display();

publicvoid Swim()
{
Console.WriteLine("I'm Swimming");
}

publicvoid PerFormFly()
{
fly.Fly();
}

publicvoid PerFormQuack()
{
quack.QuackSuper();
}
}

///<summary>
/// 飞行行为的接口
///</summary>
publicinterface IFly
{
void Fly();
}

publicclass FlyWithWings : IFly
{
publicvoid Fly()
{
Console.WriteLine("I'm flying");
}
}

publicclass FlyNoWay : IFly
{
publicvoid Fly()
{
Console.WriteLine("I can't fly");
}
}

publicclass FlayWithRocket : IFly
{
publicvoid Fly()
{
Console.WriteLine("I'm flying with rocket");
}
}

///<summary>
/// 叫的行为接口
///</summary>
publicinterface IQuack
{
void QuackSuper();
}

publicclass Quack : IQuack
{
publicvoid QuackSuper()
{
Console.WriteLine("鸭子呱呱叫");
}
}

publicclass SQuack : IQuack
{
publicvoid QuackSuper()
{
Console.WriteLine("鸭子吱吱叫");
}
}

publicclass MuteQuack : IQuack
{
publicvoid QuackSuper()
{
Console.WriteLine("鸭子不会叫");
}
}
publicclass MallardDuck : Duck
{
publicoverridevoid Display()
{
Console.WriteLine("绿头鸭子");
}
}
publicclass RedHeadDuck : Duck
{
publicoverridevoid Display()
{
Console.WriteLine("红头鸭子");
}
}
publicclass RubberDuck : Duck
{
publicoverridevoid Display()
{
Console.WriteLine("橡皮鸭子");
}
}
publicclass DecoyDuck : Duck
{
publicoverridevoid Display()
{
Console.WriteLine("诱饵鸭子");
}
}

class Program
{
staticvoid Main(string[] args)
{
Duck duck =new MallardDuck();
duck.Display();
duck.SetFly (new FlyNoWay());
duck.SetQuack(new SQuack());
duck.PerFormFly();
duck.PerFormQuack();
duck.Swim();
Console.Read();
}
}


策略模式:定义了算法族,分别封装起来,让他们之间可以相互替换,次模式让算法的变化独立于使用算法的客户
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: