• 策略模式


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

    设计原则:1 找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。

         2 针对接口编程,而不是针对实现编程

          3 多用组合,少用继承 

    举例 :  选取一个动作冒险游戏,不同角色 queen,king,knight等可以使用不同的武器,每个角色一次只能使用一种武器,但是游戏中可以更换武器。

        分析 :很明显不变的部分是攻击的行为,变化的部分是使用的武器

        1 创建变化部分的接口   weaponBehavior 

        

     public interface weaponBehavior
        {
          void uesWeapon();//约定的共有方法
        }

             2 创建不变部分的超类 character

      public abstract class character
        {
           public weaponBehavior wb;//变化的行为在超类中被定义为接口变量
          public  void setWeaponBehavior(weaponBehavior t)  // set方法可以动态的修改行为
            {
                wb = t;
            }
          public abstract void fight();//需要子类去实现的共有的不变的方法抽象出来
        }

           至此,已经分离除了变化与不变化 ,下面只需要具体的子类去实现他们了 。

      3 具体子类   武器  knifeBehavior,gunzi

    public class knifeBehavior:weaponBehavior//实现武器接口
        {
            public void uesWeapon()
            {
    
                System.Web.HttpContext.Current.Response.Write("<h1>-20 刀子</h1>");
            }
        }
    public class gunzi:weaponBehavior
        {
            public void uesWeapon(){
    
                 System.Web.HttpContext.Current.Response.Write("<h1>-10 棍子</h1>");
            }
        }

        4具体子类角色  queen

     public class Queen:character
        {
            public  Queen()  //默认武器 棍子 放在构造函数中
            {
                wb = new gunzi();
            }
           public override void fight() //实现超类的攻击行为
                                       
            {
                wb.uesWeapon();   //调用超类的接口变量实现
            }
        }        

     5 测试一把 

    Queen qu = new Queen(); //创建角色
    qu.setWeaponBehavior(new knifeBehavior());//更换武器
    qu.fight();//攻击

          

  • 相关阅读:
    摹客&#160;&#183; Veer&#160;第二届设计大赛邀你来战!
    企业官网原型制作分享-Starbucks
    12个最佳的响应式网页设计教程,轻松带你入门!
    摹客第二届设计大赛即将开幕——摹客,为设计喝彩!
    想入坑互联网产品经理,该如何从零做起?
    概率DP
    高斯消元
    树形DP

    01背包
  • 原文地址:https://www.cnblogs.com/wangjian920110/p/5395965.html
Copyright © 2020-2023  润新知