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("角色手里没有武器,无法攻击!");
                }
            }
        }
    }
  • 相关阅读:
    转:CTE(公共表表达式)——WITH子句
    排名函数——ROW_NUMBER()、RANK()、DENSE_RANK()和NTILE(n)
    深层拷贝和浅层拷贝
    Jmeter如何连接数据库Mysql
    java执行cmd命令并获取输出结果
    Java 读取Excel2007 jar包冲突的问题(org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException)
    读写文件
    eclipse报jvm terminated.exitcode=2异常解决办法
    Appium常用的API函数
    自动化生成html报告
  • 原文地址:https://www.cnblogs.com/zuochanzi/p/8434625.html
Copyright © 2011-2022 走看看