• 用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.extend 函数详解
    (转)跟我一起学JQuery插件开发教程
    (转)jQuery插件开发全解析
    (转)弹出窗口lhgDialog API文档
    (转)反射发送实战(-)InvokeMember
    (转)JQuery处理json与ajax返回JSON实例
    linux下添加用户并赋予root权限
    Linux 下配置,安装Hadoop
    Linux 下安装 jdk-7u79-linux-x64.gz,jdk1.7.0_79,jdk1.7步骤:
    linux下导入、导出mysql数据库命令
  • 原文地址:https://www.cnblogs.com/starcrm/p/1519232.html
Copyright © 2020-2023  润新知