zoukankan      html  css  js  c++  java
  • 策略模式 Web.Net版 [原理+代码] 鸭子呱呱叫

    小生初来炸到,呵呵,看了点资料,自己总结出来,对错都是很正常的,望大家多多批评指正! 由于俺是做web开发的,看了设计模式都是java的,感觉虽然还是比较懂的,但是毕竟是java的吗。。所以按照自己的理解,给翻译成C#版的了。。


    策略模式定义:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。


    设计原则:针对接口编程,而不是针对实现编程。


    这里用的是个鸭子的例子,我也就直接翻译过来了。。吼吼。。


    首先我理解策略模式最重要的就是针对接口,所以这里面当然要出现接口了。。


    我先定义个页面输出函数吧,别回来页面都没有个write函数,嘎嘎


    public class w
     {
      public static void s(string msg,System.Web.UI.Page page)
      {
       page.Response.Write(msg+"<br/>");
      }
     }


    好了,开工了。这里我就来定义这个鸭子的方法了。。谁让是我写这篇文章呢。。嘎嘎。。
    鸭子会叫,就叫quack,鸭子会游泳,就叫swim,鸭子还有外观,就叫display


    好了,就这3个方法了,但是鸭子的叫声个不一样,所以就要用接口了,而swim,所有的鸭子都会,就是指定方法了,而鸭子的外观每个都不一样,就用抽象方法弄好了。


    看看鸭子的基类:


    public abstract class duck
     {
      public duck()
      {
       //
       // TODO: 在此处添加构造函数逻辑
       //
      }


      protected quackBehavior quackBehaviorp;


      public void swim(System.Web.UI.Page page)
      {
       w.s("swim",page);
      }


      public abstract void display(System.Web.UI.Page page);//虚拟virtual 抽象abstract 注意:抽象必须放到抽象类里面


      public void quack(System.Web.UI.Page page)
      {
       quackBehaviorp.quack(page);
      }


     }//class duck end


    这里的 quackBehavior 就是接口了,现在可以针对这个接口编程了,分别定义3个类,来实现这个接口,一个呱呱叫,一个哈哈叫,一个不会叫。并给出接口。


     public interface quackBehavior
     {
      void quack(System.Web.UI.Page page);
     }


     public class quackWawa : quackBehavior
     {
      #region quackBehavior 成员


      public void quack(System.Web.UI.Page page)
      {
       // TODO:  添加 quackWawa.quack 实现
       w.s("quack:wawa",page);
      }


      #endregion


     }


     public class quackHaha : quackBehavior
     {
      #region quackBehavior 成员


      public void quack(System.Web.UI.Page page)
      {
       // TODO:  添加 quackHaha.quack 实现
       w.s("quack:haha",page);
      }


      #endregion


     }


     public class quackNone : quackBehavior
     {
      #region quackBehavior 成员


      public void quack(System.Web.UI.Page page)
      {
       // TODO:  添加 quackNone.quack 实现
       w.s("quack:None",page);
      }


      #endregion


     }


    现在我们来做两个鸭子吧,这里做个老鸭和木头鸭好了。


    public class laoya : duck
     {
      public laoya()//构造函数
      {
       quackBehaviorp = new quackWawa();
      }
      
      public override void display(System.Web.UI.Page page)
      {
       w.s("display:I am laoya!",page);
      }
     }


     public class mutouya : duck
     {
      public mutouya()
      {
       quackBehaviorp = new quackNone();
      }
      public override void display(System.Web.UI.Page page)
      {
       w.s("display:I am mutouya!",page);
      }


     }


    -------------------------------------


    前台页面调用:


       duck laoya = new laoya();
       laoya.quack(this.Page);
       laoya.display(this.Page);


       duck mutouya = new mutouya();
       mutouya.display(this.Page);
       mutouya.quack(this.Page);


    --------------------------------


    quack:wawa
    display:I am laoya!
    display:I am mutouya!
    quack:None


    --------------------------------


    看书的时候有句很经典的话,对我印象很深,虽然是很简单的东东。。呵呵


    laoya laoya = new laoya() <---- 针对显示编程


    duck laoya = new laoya() <----- 针对接口编程


    感觉很有深意啊。。今天一天什么都没干。。只要学会一种模式就好了,策略模式,总算是粗略懂了一点,代码已经都调试成功了。。大家可以一起来探讨下 策略模式 在web上的应用,大家一般都是在什么时候用上啊。。自我感觉这个可以用到会员系统上,暂时也就能想到这么多了。。写的不好,大家一定要踊跃批评啊!!

    ---------------------------------------------
    生活的意义并不是与他人争高下,而在于享受努力实现目标的过程,结果是对自己行动的嘉奖。
    ↑面的话,越看越不痛快,应该这么说:

    生活的意义就是你自己知道你要做什么,明确目标。没有目标,后面都是瞎扯!
  • 相关阅读:
    Java应用程序的运行机制
    IO流——字符流
    IO流——字节流
    Java API --- File类
    SSM框架整合
    Mybatis核心组件
    AJAX 练习
    设计者模式
    软件七大设计原则
    并发编程
  • 原文地址:https://www.cnblogs.com/pengchenggang/p/956890.html
Copyright © 2011-2022 走看看