C# 设计模式-策略(Strategy)
2018-01-11 20:30
555 查看
定义一系列算法,把它们分别封装起来,使得它们可相互替换。最终各个算法可以独立变化。
主要组成:
Strategy-策略父类或接口
ConcreteStrategy-具体策略,实现不同算法
Context-上下文,客户通过该类对不同策略进行调用
状态与策略的区别:
状态:对象内部状态的变化,从而表现为不同的行为,关键在于对象内部。
策略:对象使用不同的策略达到类似的目的,关键在于对象外部算法。
举个栗子:
状态相当于人的婴儿、少年、青年、中年、老年时期。
策略相当于人使用的工具,比如出行方式:飞机、火车、自行车等等。
相关类:
调用:
结果:
参考资料:《设计模式-可复用面对对象软件的基础》
主要组成:
Strategy-策略父类或接口
ConcreteStrategy-具体策略,实现不同算法
Context-上下文,客户通过该类对不同策略进行调用
状态与策略的区别:
状态:对象内部状态的变化,从而表现为不同的行为,关键在于对象内部。
策略:对象使用不同的策略达到类似的目的,关键在于对象外部算法。
举个栗子:
状态相当于人的婴儿、少年、青年、中年、老年时期。
策略相当于人使用的工具,比如出行方式:飞机、火车、自行车等等。
相关类:
using System; namespace Strategy { /// <summary> /// 旅游(策略父类或接口) /// </summary> abstract class TravelStrategy { public abstract void Travel(); } /// <summary> /// 飞机(具体策略) /// </summary> class Plane : TravelStrategy { public override void Travel() { Console.WriteLine("坐飞机旅游"); } } /// <summary> /// 火车 /// </summary> class Train : TravelStrategy { public override void Travel() { Console.WriteLine("坐火车旅游"); } } /// <summary> /// 单车 /// </summary> class Bike : TravelStrategy { public override void Travel() { Console.WriteLine("骑单车旅游"); } } /// <summary> /// 旅游上下文 /// </summary> class TravelContext { TravelStrategy travelStrategy; public TravelContext(TravelStrategy travelStrategy) { this.travelStrategy = travelStrategy; } public void Travel() { travelStrategy.Travel(); } } }
调用:
using System; namespace Strategy { class Program { static void Main(string[] args) { //坐飞机旅游 TravelContext travelByPlane = new TravelContext(new Plane()); travelByPlane.Travel(); //坐火车旅游 TravelContext travelByTain= new TravelContext(new Train()); travelByTain.Travel(); //骑单车旅游 TravelContext travelByBike = new TravelContext(new Bike()); travelByBike.Travel(); Console.Read(); } } }
结果:
参考资料:《设计模式-可复用面对对象软件的基础》
相关文章推荐
- C#设计模式系列:策略模式(Strategy)
- C#设计模式——策略模式(Strategy Pattern)
- [导入]C#面向对象设计模式纵横谈(23):(行为型模式) Strategy 策略模式.zip(8.00 MB)
- 设计模式学习笔记(六)之策略模式(Strategy)
- 设计模式(二)-策略(Strategy)模式
- Head First 设计模式 C++实现-Strategy(策略模式)
- PHP设计模式-策略模式Strategy
- 设计模式22:Strategy 策略模式(行为型模式)
- 设计模式 (一)——策略模式(Strategy,行为型)
- Java设计模式之策略模式(Strategy模式)介绍
- 设计模式系列1-----C++实现策略模式(Strategy)
- C# 设计模式----策略模式
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
- 设计模式-策略模式(Strategy)
- 设计模式之Strategy(策略)
- 设计模式之策略模式strategy学习
- Strategy 设计模式 策略模式 超靠谱原代码讲解
- 设计模式(18)-策略模式(Strategy)
- 8.2.1 策略设计模式(The strategy design pattern)
- 23种设计模式 之 Strategy模式(策略模式)[C语言]