策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
原文地址:01.策略模式-上篇
概述:
策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
1.定义飞行行为接口
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 策略模式 {public interface IFlyBehavior {void Fly(); } }
2.定义飞行行为,继承飞行行为接口
(1)FlyNoWay不会飞
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 策略模式 {public class FlyNoWay:IFlyBehavior {public void Fly() { Console.WriteLine("I can't fly"); } } }
(2)FlyWithWings会飞,用翅膀
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 策略模式 {public class FlyWithWings:IFlyBehavior {public void Fly() { Console.WriteLine("I'm flying!!"); } } }
3.定义绿头鸭MallarDuck,继承Duck类
using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 策略模式 {public class MallarDuck:Duck {public MallarDuck() {base.iFlyBehavior = new FlyWithWings(); }public override void Display() { Console.WriteLine("I'm a real Mallard duck"); } } }
4.主程序
using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography.X509Certificates;using System.Text;using System.Threading.Tasks;namespace 策略模式 {class Program {static void Main(string[] args) { Duck mallarDuck = new MallarDuck(); mallarDuck.PerformFly(); Console.ReadKey(); } } }