设计模式连载:第二篇职业和武器模式,成就你的梦想

原创 2016年05月31日 19:20:56


//注意 以下代码均是讲解的最终版本,详细讲解内容,请关注直播 


using strategyone;

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


namespace strategyone
{


 //为什么叫职业和武器模式, 肯定都玩过网络游戏或者单机游戏 MMO这种的
//我个人喜欢玩: 战士  不是策划强行要求 ,战士的武器都是 剑 枪 棍 斧 (近战武器)
//弓箭手 的武器 都是 弓 或者是 弩, 如果这个游戏现代化点,那么就是枪炮 (远程武器)


// 我们现在是一个角色,   1. 战士(近战武器) 2 弓箭手(远程武器) 
//第一开始我们写的 角色,  角色里面有一个方法, 拿近战武器的方法,拿远程武器的方法 


  //战士 和 弓箭手都是 继承  角色的。 同时继承了他们的方法
  //   如果 写的比较烂,  那么 我们战士有可能会拿起弓 ,这了不得啊
   // 如果写的稍微烂, 那么   我们可以在 战士和弓箭手的类中实现 这个 拿各自武器的方法
   //但是随着需求增加, 我们会苦不堪言   
   //
   
   //所以我们现在有一种模式,  利用的继承的好处,抛弃的继承的包袱
   //  多态  是 有魔力的  真的很棒  


 //我们写代码 就要写有弹性的代码,越有弹性 越好, 利于我们后期的维护
        
 //我们今天讲的这个模式,就是 把变化的和不变的 分离开!! 这是关键之处
 //当我们写代码的时候,发现那些功能会不断的变化,那么我们果断给他从大团体里分离开 
 
       //现在我们来写几个类,通过案例就能发现其中的奥秘


        // 1 角色类,  2战士类 3 弓箭手类 
        //         




        // 我们现在把 角色这个类 给抽象 
public abstract/*抽象类型*/ class  character
    {


        //我们刚才不是写了一个 武器接口吗?


       public Raw_weapon raw_weapon; //(有奖竞猜)知道为啥我们要写这个东西吗?稍后告诉你们








        //增加一个方法


        public void set_weapon_change(Raw_weapon raw_weapon)
        {
            this.raw_weapon = raw_weapon;
        }




       //我们这个万恶的方法是不是就应该被淘汰掉了呢?
       public void Set_weapon()
        {
        raw_weapon.set_weapon_type();//(有奖竞猜)知道为啥我们要写这个东西吗?稍后告诉你们
        }
    






    } 
           
public class warrior:character
    {


        //写构造方法
        public warrior()
        {
            //我们思考一下, 战士需要拿剑,对吧,为了有弹性的代码,我们应该这样子写
            raw_weapon = new sword_weapon();  //心态准备爆炸!!!




        }


        public void des_job()
        {
            Console.WriteLine("我是战士,我总是冲在最前面!保护我的队友");
        }


      
  


    }


public class bowman:character
    {
        public void  des_job()
        {
            Console.WriteLine("我是弓箭手,我天生娇贵,没有办法怪我喽");
        }
        //写构造方法
        public bowman()
        {
            //我们思考一下, 战士需要拿剑,对吧,为了有弹性的代码,我们应该这样子写
            raw_weapon = new bow_weapon();  //心态准备爆炸!!!




        }




    }


  public class Asn:character
    {


        public void des_job()
        {
            Console.WriteLine("我是刺客,我喜欢各种阴人,阴人就是我最大的爱好");
        }




        //写构造方法
        public Asn()
        {
            //我们思考一下, 战士需要拿剑,对吧,为了有弹性的代码,我们应该这样子写
            raw_weapon = new Asn_weapon();  //心态准备爆炸!!!




        }






    }
















    //从上述案例,我们似乎发现了一个非常爆炸的消息
    //有些功能总是TMD在变化,烦死人了,每次都要动写好的代码,难过的不要不要的




    //我们的这个模式,就像上帝一样,帮我们消灭邪恶的人们,拯救我们脱离苦海
    //我们把变化的给从集体里面抽出来,给他关进小黑屋子,让他哼,大伙懂得
    //  我们发现,每当出一个新的职业,就需要新的武器, 
    //我们可以强行  告诉自己, 这武器,是万恶的源头!!!


    //要想写一个有 弹性 的代码,  关键字就是 弹性!!!  我们来思考一下,我们如写有弹性的代码


    //总结 1. 找出“活泼”的代码,把他们独立起来,不要和那些 “死气沉沉”的代码混在一起
    // 2 .针对“接口”编程,而不是针对“实现”编程
    //这样子就有利于我们写出 富有弹性的代码


    //根据上述原则, 我们写一个接口


    //接口什么内容呢?  武器的祖先(这个接口是所有武器类型的 祖先!)


    //武器的祖先(这个接口是所有武器类型的 祖先!)
       public interface Raw_weapon
    {
        void set_weapon_type();
       }
    //每个武器都写出一个具体的类  弓类, 剑类 冰火毒龙钻类, 魔杖类 
    public  class bow_weapon:Raw_weapon
    {
        public void set_weapon_type()
        {
            Console.WriteLine("我的名字叫做:神弓,谁拿了我,谁拥有了一支穿云箭");
            //throw new NotImplementedException();
        }


    }


    public class ice_weapon : Raw_weapon
    {
        public void set_weapon_type()
        {
            Console.WriteLine("我是冰火毒龙钻的大哥,我叫冰火两重天");
            //throw new NotImplementedException();
        }


    }






    public class Asn_weapon : Raw_weapon
    {
        public void set_weapon_type()
        {
            Console.WriteLine("我的名字叫做:冰火毒龙钻,谁敢嘲笑我?");
            //throw new NotImplementedException();
        }


    }


    public class sword_weapon : Raw_weapon
    {
        public void set_weapon_type()
        {
            Console.WriteLine("我已经拿到了上古传说的神剑");


            //throw new NotImplementedException();
        }


    }










    //我们有弓箭手, 弓, 战士,剑,刺客,冰火毒龙钻,法师,魔杖






    //每个武器都写出一个具体的类  弓类, 剑类 冰火毒龙钻类, 魔杖类       
    //这样子 我们就把变化的部分,全部独立了,




    //我们已经创建好了  角色类(所有职业的祖先了)  战士类,弓箭手类,魔法师类,刺客类 


















    class Program
    {
        static void Main(string[] args)
        {


            //战士  富有弹性的代码就这样子写出来了
            //现在我们就讲解一下 究竟发生了什么
           //// character c1 = new warrior();
           /// c1.Set_weapon();


           //// character c2 = new bowman();
         ///  c2.Set_weapon();






            character c3 = new Asn(); 
            c3.Set_weapon();
            //动态改变武器,真是酷炫到家了
            c3.set_weapon_change(new ice_weapon());
            //将冰火毒龙钻,变成冰火两重天、
            c3.Set_weapon();



      //这时 我们就 写出了 一个 极具富有弹性的代码,
      //让我们的后期维护以及前期开发变得轻松 so easy !!!
      //今天 我们将揭开 我们这个模式的神秘面纱: 他的名字叫做:策略模式!!

           




            //我们不能根据需求动态的创造,现在我们需要动态更加有弹性
            //要追求就追求到极致






        }
    }
}

Android多媒体(三) 音频与视频合并 我用双手成就你的梦想

上两篇中讲了 Android多媒体(一) 音轨合成 我用双手成就你的梦想 Android多媒体(二) 多段Mp4文件拼接 我用双手成就你的梦想 今天实现的是音频与视频的合并。 实现该效果,仍旧使用...
  • qq_18612815
  • qq_18612815
  • 2016年05月27日 10:46
  • 1201

做最好的自己 成就更多人的梦想

做最好的自己 成就更多人的梦想 初遇茆春华,猛然心中一颤。一个笑容可掬、举止典雅、心地善良的平凡女子竟然是如新公司的四届寰宇领袖、卓越成就名人!她真诚的语言中流露出善良朴实,她无私忘我的精神让每一位...
  • caoghui
  • caoghui
  • 2011年12月20日 21:10
  • 691

学习、奋斗、理想、自强、习惯、志趣、踏实、吃苦、读书

《学习》 “人才有高下,知物由学。” 解析:梦想从学习开始,事业靠本领成就。《奋斗》 “志之所趋,无远弗届,穷山距海,不能限也” 解析:对于想做的事情要敢于尝试,努力从无到有,...
  • lsh869
  • lsh869
  • 2016年05月05日 01:18
  • 639

设计模式 装饰者模式 带你重回传奇世界

今天继续设计模式之旅,给大家带来装饰者模式,国际惯例,先看定义。 装饰者模式:若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。 先简单描述下装饰者模式发挥作用的地方,当我...
  • lmj623565791
  • lmj623565791
  • 2014年04月21日 20:21
  • 17599

23种设计模式中,自己比较熟悉的6种模式

1.迭代器模式 它提供一种方法来访问容器中对象的各个属性,却又不暴露对象的内部细节。一般直接使用iterator 2.单例模式 确保某一个类只有一个实例,并且自行实例化,并向整个系统提供该实例 ...
  • baidu_21578557
  • baidu_21578557
  • 2016年04月13日 16:53
  • 1032

成就你的创业梦想

2014年怎么放单最安全选择SnS平台还你创业梦想 选择SnS平台8大理由 第一:SnS平台所有刷手都经过专业的培训,我们更专业为。 第二:SnS平台定期开展商家培训,教你宝贝排名快...
  • hansarm
  • hansarm
  • 2014年04月05日 01:19
  • 485

测试你的名字是什么武器...

测试你的名字是什么武器... 例如:“王二小”=“WEX”=“九天丧门锤”           附:从姓氏开始找,再往下找名。若是只有两个字的,便从“姓氏”与“结字”中各找一个。           ...
  • addwing
  • addwing
  • 2007年06月08日 10:15
  • 537

请问你的梦想是什么?

在非诚勿扰中有一期节目,一个海归小伙子在最后一个环节问女嘉宾“请问,你的梦想是什么?”。这个问题很确实一语中的。第一个女嘉宾,慌乱中回答,我暂时还没想好,我没有梦想。第二个心动女生是谢佳,她说她希望自...
  • yqxx
  • yqxx
  • 2010年05月30日 12:24
  • 694

Python中的高级设计模式

本文展示一些高级的Python设计结构和它们的使用方法。在日常工作中,你可以根据需要选择合适的数据结构,例如对快速查找性的要求、对数据一致性的要求或是对索引的要求等,同时也可以将各种数据结构合适地结合...
  • zhoudaxia
  • zhoudaxia
  • 2014年04月11日 17:13
  • 3250

"让你的努力配得上你的梦想"读后感

“让你的努力配得上你的梦想”是一本”励志”类的读物,在读之前内心里是有一些”怕浪费时间的”,但是坚持着读下去,发现这本书是我所需要的,它是以一个一个的小故事来宣教坚持努力”这个主旨的。我们生活的这个世...
  • lu_yongchao
  • lu_yongchao
  • 2017年01月16日 13:03
  • 445
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式连载:第二篇职业和武器模式,成就你的梦想
举报原因:
原因补充:

(最多只允许输入30个字)