zoukankan      html  css  js  c++  java
  • 用C#改写Head First Design PatternsStrategy策略模式(原创)

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

    namespace Strategy
    {
        /// <summary>
        /// 具有飞行行为
        /// </summary>
        public interface FlyBehavior
        {
            void fly();
        }

        /// <summary>
        /// 具有吃饭行为
        /// </summary>
        public interface EatBehavior
        {
            void eat();
        }

        /// <summary>
        /// 用翅膀飞
        /// </summary>
        public class FlyWithWings: FlyBehavior
        {


            #region FlyBehavior 成员

            void FlyBehavior.fly()
            {
                System.Console.WriteLine("用翅膀飞");
            }

            #endregion
        }

        /// <summary>
        /// 用翅膀飞
        /// </summary>
        public class FlyNoWay : FlyBehavior
        {


            #region FlyBehavior 成员

            void FlyBehavior.fly()
            {
                System.Console.WriteLine("飞不了");
            }

            #endregion
        }


        public class EatMeat : EatBehavior
        {

            #region EatBehavior 成员

            void EatBehavior.eat()
            {
                System.Console.WriteLine("吃肉");
            }

            #endregion
        }

        public class EatAll : EatBehavior
        {

            #region EatBehavior 成员

            void EatBehavior.eat()
            {
                System.Console.WriteLine("什么都吃,杂食");
            }

            #endregion
        }
    }

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

    namespace Strategy
    {
        class AnimalClass
        {
            public abstract class Animal
            {
                protected FlyBehavior fb;
                protected EatBehavior eb;
                public  string name;

                public Animal() { }

                public void Fly()
                {
                    fb.fly();
                }

                public void Eat()
                {
                    eb.eat();
                }
           
            }

            public class Tiger : Animal
            {
                public Tiger()
                {
                    fb=  new FlyNoWay();
                    eb = new EatMeat();
                    name = "老虎";
                }
            }

            public class Eagle : Animal
            {

                public Eagle()
                {
                    fb = new FlyWithWings();
                    eb = new EatMeat();
                    name = "老鹰";
                }
            }

            public class Human : Animal
            {
                public Human()
                {
                    fb = new FlyNoWay();
                    eb = new EatAll();
                    name = "人类";
                }
            }
        }
    }

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

    namespace Strategy
    {
        class Program
        {
            static void Main(string[] args)
            {
                Strategy.AnimalClass.Tiger t = new AnimalClass.Tiger();
                System.Console.WriteLine(t.name);
                t.Eat();
                t.Fly();
                Strategy.AnimalClass.Eagle e = new AnimalClass.Eagle();
                System.Console.WriteLine(e.name);
                e.Eat();
                e.Fly();
                Strategy.AnimalClass.Human h = new AnimalClass.Human();
                System.Console.WriteLine(h.name);
                h.Eat();
                h.Fly();
                System.Console.ReadLine();
            }
        }
    }

    关于作者: 王昕(QQ:475660) 在广州工作生活30余年。十多年开发经验,在Java、即时通讯、NoSQL、BPM、大数据等领域较有经验。
    目前维护的开源产品:https://gitee.com/475660
  • 相关阅读:
    jquery.validate.unobtrusive的使用
    企业库判断数据库连接类型
    win10下安装LoadRunner12汉化包
    win10安装LoadRunner时,安装.net framwork组件报0x800F081F错误 解决办法
    wrk性能测试(详解)
    wrk压测报错 LF character expected at 1:111
    Linux scp命令详解(服务器之间复制文件或目录)
    Linux cat命令详解(连接文件并打印到标准输出设备上)
    性能测试流程
    ‘mysql’不是内部或外部命令,也不是可运行的程序--解决方法
  • 原文地址:https://www.cnblogs.com/starcrm/p/1519232.html
Copyright © 2011-2022 走看看