• Strategy Pattern


    Definition:

    Identify the aspects of your application that vary and separate them from what stays the same

    Sample Code: 

    namespace StrategyPattern
    {
        public abstract class Duck
        {
            protected FlyBehavior flyBehavior;
            protected QuackBehavior quackBehavior;
    
            public Duck() { }
    
            public abstract void display();
    
            public void swim()
            {
                Console.WriteLine("All ducks float");
            }
            
            public void performFly() 
            {
                flyBehavior.fly();
            }
            public void performQuack()
            {
                quackBehavior.quack();
            }
            public void setFlyBehavior(FlyBehavior behavior)
            {
                flyBehavior = behavior;
            }
            public void setQuackBehavior(QuackBehavior behavior)
            {
                quackBehavior = behavior;
            }
        }
        public interface FlyBehavior
        {
            void fly();
        }
        public interface QuackBehavior
        {
            void quack();
        }
        public class FlyWithWings : FlyBehavior
        {
            public void fly()
            {
                Console.WriteLine("Fly with wings");
            }
        }
        public class FlyNoWay : FlyBehavior
        {
            public void fly()
            {
                Console.WriteLine("Do nothing"); 
            }
        }
        public class Quack : QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Duck is quacking");
            }
        }
        public class Squeak : QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Duck is squeaking");
            }
        }
        public class MuteQuack : QuackBehavior
        {
            public void quack()
            {
                Console.WriteLine("Do nothing");
            }
        }
    
        public class MallarDuck : Duck
        {
            public MallarDuck() 
            {
                flyBehavior = new FlyWithWings();
                quackBehavior = new Quack();
            }
            public override void display()
            {
                Console.WriteLine("This is a real Mallard duck");
            }
        }
    }

    Usage:

            static void CallStrategy()
            {
                MallarDuck duck = new MallarDuck();
    
                //Perform the default behaviors assigned in construct
                duck.performFly();
                duck.performQuack();
    
                //Change the hehaviors during runtime
                duck.setFlyBehavior(new FlyNoWay());
                duck.setQuackBehavior(new MuteQuack());
    
                duck.performFly();
                duck.performQuack();
            }

    Class Diagram:

  • 相关阅读:
    JavaScript字符串转换为变量名
    python对象反射和函数反射
    android studio 更新Gradle版本方法
    【Node.js】'readline' 逐行读取、写入文件内容
    nodejs 设计模式
    MongoError: server instance in invalid state undefined 解决办法
    nodejs对mongodb数据库的增删改查操作(转载)
    JSON详解
    mac 安装python3
    Oracle_安装说明
  • 原文地址:https://www.cnblogs.com/LeoTang/p/2442832.html
Copyright © 2020-2023  润新知