zoukankan      html  css  js  c++  java
  • Head First 设计模式----StrategyPattern

    策略模式定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户

    Interface

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace StrategyPattern.Interface
    {
        public interface FlyBehavior
        {
            void fly();
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace StrategyPattern.Interface
    {
        public interface QuackBehavior
        {
            void quack();
        }
    }

    Behavior

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    
    namespace StrategyPattern.Behavior
    {
        //实现了所有不会飞鸭子的动作
        public class FlyNoWay:FlyBehavior
        {
            public void fly()
            {
                Console.WriteLine("I can't fly");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    
    namespace StrategyPattern.Behavior
    {
        //利用火箭动力的飞行行为
        public class FlyRocketPowered:FlyBehavior
        {
            public void fly()
            {
                Console.WriteLine("I'm flying with a rocket!");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    namespace StrategyPattern.Behavior
    {
        //实现了所有有翅膀鸭子的飞行动作
        public class FlyWithWings:FlyBehavior
        {
            public void fly()
            {
                Console.WriteLine("I'm flying!");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    namespace StrategyPattern.Behavior
    {
        //名为呱呱叫,其实不出声
        public class MuteQuack:QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("<< Silence >>");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    namespace StrategyPattern.Behavior
    {
        //呱呱叫
        public class Quack:QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Quack");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    namespace StrategyPattern.Behavior
    {
        //名为呱呱叫,实为吱吱叫
        public class Squeak:QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Squeak");
            }
        }
    }

    使用

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Interface;
    
    namespace StrategyPattern
    {
        public abstract class Duck
        {
            protected FlyBehavior flyBehavior;
            protected QuackBehavior quackBehavior;
    
            public abstract void display();
    
            public void performFly()
            {
                flyBehavior.fly();
            }
            public void performQuack()
            {
                quackBehavior.quack();
            }
            public void swim()
            {
                Console.WriteLine("All ducks float, even decoys!");
            }
    
            public void setFlyBehavior(FlyBehavior fb)
            {
                flyBehavior = fb;
            }
            public void setQuackBehavior(QuackBehavior qb)
            {
                quackBehavior = qb;
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Behavior;
    
    namespace StrategyPattern
    {
        //绿头鸭(一种野鸭)
        public class MallardDuck:Duck
        {
            public MallardDuck()
            {
                quackBehavior = new Quack();
                flyBehavior = new FlyWithWings();
            }
            public override void display()
            {
                Console.WriteLine("I'm a real Mallard duck");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using StrategyPattern.Behavior;
    namespace StrategyPattern
    {
        //模型鸭
        public class ModelDuck:Duck
        {
            public ModelDuck()
            {
                flyBehavior = new FlyNoWay();
                quackBehavior = new Quack();
            }
            public override void display()
            {
                Console.WriteLine("I'm a model duck");
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace StrategyPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Test Mallard Duck");
                Duck mallard = new MallardDuck();
                mallard.performFly();
                mallard.performQuack();
    
                Console.WriteLine("Test Model Duck");
                Duck model = new ModelDuck();
                model.performFly();
                model.setFlyBehavior(new StrategyPattern.Behavior.FlyRocketPowered());
                model.performFly();
    
                //Stop
                Console.ReadLine();
            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    namespace StrategyPattern
    {
        class Program
        {
            static void Main(string[] args)
            {
                Console.WriteLine("Test Mallard Duck");
                Duck mallard = new MallardDuck();
                mallard.performFly();
                mallard.performQuack();
    
                Console.WriteLine("Test Model Duck");
                Duck model = new ModelDuck();
                model.performFly();
                model.setFlyBehavior(new StrategyPattern.Behavior.FlyRocketPowered());
                model.performFly();
    
                //Stop
                Console.ReadLine();
            }
        }
    }
  • 相关阅读:
    .NET + Jcrop 实现在线裁图功能
    jquery表格可编辑修改表格里面的值,点击td变input无刷新更新表格
    A、B、C、D和E类IP地址
    linux内核源码阅读之facebook硬盘加速flashcache之四
    Help-IntelliJIDEA-2019.3.4-插件:插件下载,安装,重启idea
    Help-IntelliJIDEA-2019.3.4-基础设置:14. intellij idea怎么调整菜单栏字体大小
    Help-IntelliJIDEA-2019.3.4-基础设置:13. 统一设置编码
    Help-IntelliJIDEA-2019.3.4-基础设置:12. Intellij IDEA的代码提示功能
    Help-IntelliJIDEA-2019.3.4-基础设置:11. idea 自动补全返回值,自动补全变量名称和属性名称
    Help-IntelliJIDEA-2019.3.4-基础设置:10.Maven自动下载源码包,告别反编译,直接上源码注释
  • 原文地址:https://www.cnblogs.com/SmileX/p/4155081.html
Copyright © 2011-2022 走看看