zoukankan      html  css  js  c++  java
  • 开闭原则

    开闭原则Open Closed Principle (OCP)是面向对象设计中“可复用设计”的基石,是面向对象设计中最重要的原则之一,其它很多的设计原则都是实现开闭原则的一种手段。对于扩展是开放的,对于修改是关闭的,这意味着模块的行为是可以扩展的。当应用的需求改变时,我们可以对模块进行扩展,使其具有满足那些改变的新行为。也就是说,我们可以改变模块的功能。对模块行为进行扩展时,不必改动模块的源代码或者二进制代码。模块的二进制可执行版本,无论是可链接的库、DLL或者.EXE文件,都无需改动。

    参考http://www.cnblogs.com/leoo2sk/archive/2009/06/17/1504693.html   依赖注入那些事.

    下边如果添加武器装备, 那要多下边的代码进行加入修改,这样就违背了开闭原则,对扩展开放,对修改关闭.  通过武器接口, 分类武器继承实现, 可以更容易实现扩展和不做修改.

     public void Attack(Monster monster)
            {
                if (monster.HP <= 0)
                {
                    Console.WriteLine("此怪物已死");
                    return;
                }
      
                if ("WoodSword" == this.WeaponTag)
                {
                    monster.HP -= 20;
                    if (monster.HP <= 0)
                    {
                        Console.WriteLine("攻击成功!怪物" + monster.Name + "已死亡");
                    }
                    else
                    {
                        Console.WriteLine("攻击成功!怪物" + monster.Name + "损失20HP");
                    }
                }
                else if ("IronSword" == this.WeaponTag)
                {
                    monster.HP -= 50;
                    if (monster.HP <= 0)
                    {
                        Console.WriteLine("攻击成功!怪物" + monster.Name + "已死亡");
                    }
                    else
                    {
                        Console.WriteLine("攻击成功!怪物" + monster.Name + "损失50HP");
                    }
                }
                else if ("MagicSword" == this.WeaponTag)
                {
                    Int32 loss = (_random.NextDouble() < 0.5) ? 100 : 200;
                    monster.HP -= loss;
                    if (200 == loss)
                    {
                        Console.WriteLine("出现暴击!!!");
                    }
      
                    if (monster.HP <= 0)
                    {
                        Console.WriteLine("攻击成功!怪物" + monster.Name + "已死亡");
                    }
                    else
                    {
                        Console.WriteLine("攻击成功!怪物" + monster.Name + "损失" + loss + "HP");
                    }
                }
                else
                {
                    Console.WriteLine("角色手里没有武器,无法攻击!");
                }
            }
        }
    }
  • 相关阅读:
    实用 zsh 插件
    laravel 实用扩展包
    laravel Collection mapToDictionary 例子
    laravel mapSpread 例子
    mac 命令行大杂烩
    iview table中 on-view事件点击无效
    github网站打不开了
    iview table 表头样式修改
    $attrs is readonly
    iview中modal如何修改标题颜色
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/8434625.html
Copyright © 2011-2022 走看看