策略模式[strategy pattern]

it2022-05-05  95

[策略模式] 定义算法家族,分别封装起来,让他们之间可以互相替换  此模式可以让算法的变化不影响到使用算法的客户 [OO原则之一] 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程        //代码来自 head first java(可惜不是C#,但是代码差不多)      // 注释均为个人见解     // 飞行接口      public   interface  IFlyBehavior    {         void  fly();    }     // 具体的飞行动作--普通飞,就算是其他的类(本例为鸭子),也可以使用它      public   class  flywithWings : IFlyBehavior    {         public   void  fly()        {            Console.WriteLine( " i can normal fly " );        }    }     // 具体的飞行动作--用用火箭助推器      public   class  flywithRoket : IFlyBehavior    {         public   void  fly()        {            Console.WriteLine( " I fly with rocketPower " );        }    }     // 鸭子抽象类      public   abstract   class  duck    {         // 一个飞行接口对象          public  IFlyBehavior flybehavior;         // 关键!!利用多态实现飞行动作          public   void  fly()        {            flybehavior.fly();        }         // 这个方法可以改变飞行的动作          public   void  setFlyBeh(IFlyBehavior fb)        {            flybehavior  =  fb;        }         // 鸭子都有不同的外表          public   abstract   void  display();         // 鸭子都会游泳          public   void  swiming()        {            Console.WriteLine( " all duck can swim " );        }    }     // 一个鸭子实例      public   class  whtduck : duck    {         // 初始化得时候定义了它如何飞          public  whtduck()        {            flybehavior  =   new  flywithWings();        }         public   override   void  display()        {            Console.WriteLine( " 我的黄皮肤的中国鸭 " );        }    }     class  Program    {         // 测试          static   void  Main( string [] args)        {            duck d  =   new  whtduck();            d.fly();            d.setFlyBeh( new  flywithRoket());            d.fly();            Console.Read();        }    }

     //代码来自大话设计模式(并且省略了一部分)

     // 注释是为个人见解     // 交钱接口      public   interface  Ijiaoqian    {         double  acceptCash( double  money);    }     // 普通缴费      class  Normal : Ijiaoqian    {         public   double  acceptCash( double  money)        {             return  money;        }    }     // 打折缴费      class  dazhe : Ijiaoqian    {         private   double  MoneyRebate  =  1d;         public  dazhe( string  moneyRebate)        {             this .MoneyRebate  =   double .Parse(moneyRebate);        }         public   double  acceptCash( double  money)        {             return  money  *  MoneyRebate;        }    }     class  strategy    {         private  Ijiaoqian jq;         // 设置策略          public   void  setModel(Ijiaoqian jq)        {             this .jq  =  jq;        }         // 调用设置后的缴费方式          public   double  retResult( double  moneny)        {             return  jq.acceptCash(moneny);        }    }     class  Program    {         static   void  Main( string [] args)        {             // 原代码把缴费选项存在一个XML文件里如下,通过数据绑定到dropdownlist             // 加上反射,这样就可以只需要修改XML文件,既达到目的             // 给实例化类的构造函数参数              object [] arg  =   new   string [] {  " 0.8 "  };            strategy s  =   new  strategy();            s.setModel((Ijiaoqian)Assembly.Load( " mychengxuji " ).CreateInstance( " WhtNamespace.dazhe " false , BindingFlags.Default,  null , arg,  null null ));             double  d  =  s.retResult( 10 );            Console.WriteLine(d);            Console.Read();        }    }     //   <CashAcceptType>     //     <type>     //         <name>正常收费</name>     //         <class>CashNormal</class>     //         <para></para>     //     </type>     //     <type>     //         <name>满300返100</name>     //         <class>CashReturn</class>     //         <para>300,100</para>     //     </type>     //     <type>     //         <name>满200返50</name>     //         <class>CashReturn</class>     //         <para>200,50</para>     //     </type>     //     <type>     //         <name>打8折</name>     //         <class>CashRebate</class>     //         <para>0.8</para>     //     </type>     //     <type>     //         <name>打7折</name>     //         <class>CashRebate</class>     //         <para>0.7</para>     //     </type>     // </CashAcceptType>

 

转载于:https://www.cnblogs.com/renjuwht/archive/2010/01/16/1649779.html

相关资源:各显卡算力对照表!

最新回复(0)