zoukankan      html  css  js  c++  java
  • 策略模式

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

    设计原则: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();//攻击

          

  • 相关阅读:
    Asp.net MVC FluentHTML and Fluent Interface
    Linux上安装Sybase
    Oracle PL/SQL开发利器Toad应用总结(一)PL/SQL Program基本编写、调试
    ELMAH——可插拔错误日志工具
    用SQLMonitor监视SQL*Net
    如何得到自增id值
    SQL Server ID自增列重新从1开始算起
    加载TreeView并设置复选框
    编程设置最小化、最大化、关闭按钮 相关讨论
    在 VB.NET 编程中使用数组
  • 原文地址:https://www.cnblogs.com/wangjian920110/p/5395965.html
Copyright © 2011-2022 走看看