1.策略模式

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

 

 

namespace DesignPattern._1.StrategyPattern

{

    public abstract class Duck

    {

        public IFlyBehavior flyBehavior = null;

        public IQuackBehavior quackBehavior = null;

 

        public Duck(){}

 

        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(IFlyBehavior fb)

        {

            flyBehavior = fb;

        }

 

        public void SetQuackBehavior(IQuackBehavior qb)

        {

            quackBehavior = qb;

        }

    }

 

    public class MallardDuck : Duck

    {

        public MallardDuck()

        {

            flyBehavior = new FlyWithWings();

            quackBehavior = new Quack();

        }

 

        public override void display()

        {

            Console.WriteLine("I'm a real Mallard Duck");

        }

 

    }

 

 

    public interface IFlyBehavior

    {

         void fly();

    }

 

    public class FlyWithWings : IFlyBehavior

    {

        public void fly()

        {

            Console.WriteLine("I'm flying");

        }

    }

 

    public class FlyNoWay : IFlyBehavior

    {

        public void fly()

        {

            Console.WriteLine("I can't fly");

        }

    }

 

 

    public interface IQuackBehavior

    {

        void quack();

    }

 

    public class Quack: IQuackBehavior

    {

        public void quack()

        {

            Console.WriteLine("Quack");

        }

    }

 

    public class MuteQuack:IQuackBehavior

    {

        public void quack()

        {

            Console.WriteLine("<<Silence>>");

        }

    }

 

    public class Sqleak:IQuackBehavior

    {

        public void quack()

        {

            Console.WriteLine("Squeak");

        }

    }

 

    public class ModelDuck : Duck

    {

        public ModelDuck()

        {

            flyBehavior = new FlyNoWay();

            quackBehavior = new Quack();

        }

 

        public override void display()

        {

            Console.WriteLine("I'm a model duck");

        }

    }

 

    public class FlyRockekPowered:IFlyBehavior

    {

        public void fly()

        {

            Console.WriteLine("I'm flying with a rocket!");

        }

    }

 

    public class StragegyPatternTestClass

    {

        public StragegyPatternTestClass()

        {

            Duck mallard = new MallardDuck();

            mallard.performQuack();

            mallard.performFly();

 

            Duck model = new ModelDuck();

            model.performFly();

 

            model.setFlyBehavior(new FlyRockekPowered());

            model.performFly();

        }

 

    }

}




namespace DesignPattern

{

    class Program

    {

        static void Main(string[] args)

        {

            //1. Stragegy Pattern

            new StragegyPatternTestClass();//StragegyPattern

 

 

 

            System.Console.Read();

 

			

            

        }

    }

}

 

你可能感兴趣的:(策略模式)