您的位置:首页 > 编程语言 > C#

C# 设计模式-策略(Strategy)

2018-01-11 20:30 555 查看
定义一系列算法,把它们分别封装起来,使得它们可相互替换。最终各个算法可以独立变化。

主要组成:

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();
}
}
}


结果:



参考资料:《设计模式-可复用面对对象软件的基础》
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息