深入理解C#设计模式之策略模式 角色具体案例分享

1. 策略模式简介

策略模式是一种行为设计模式,它定义了一组算法,将每个算法都封装起来,以便能够互换使用。策略模式让算法的变化独立于使用它的客户端。

2. 策略模式的角色

2.1 上下文(Context)

上下文是客户端与策略对象之间的桥梁,它负责传递客户端所需要的数据给策略对象,并调用策略对象中的算法进行处理。

2.2 抽象策略(Strategy)

抽象策略是策略模式中的核心接口,它定义了一组算法接口,同时它也是所有具体策略类的父类。

2.3 具体策略(ConcreteStrategy)

具体策略是策略模式中的具体算法实现,它实现了策略接口,具体算法由具体策略来实现。

3. 策略模式的案例分享

现在,我们通过一个简单的案例来深入理解策略模式的应用。

3.1 案例背景

小明是一名烘焙师,他的店铺专门制作各类美食甜点。他需要在不同的状态下制作不同口感的甜点。例如,做某种甜点时,当温度低于60℃时需要添加一种配料,而当温度高于60℃时需要添加另一种配料。小明现在想要使用策略模式来实现这个功能,以便随时能够更换新的配料。

3.2 解决方案

根据上述问题,我们可以将甜点和配料的添加分别定义为两个具体策略,然后在小明的甜点制作过程中,根据温度的不同使用不同的配料策略。

//抽象策略

interface IIngredientsStrategy

{

void AddIngredients();

}

//具体策略1

class IngredientsStrategy1 : IIngredientsStrategy

{

public void AddIngredients()

{

Console.WriteLine("添加配料1");

}

}

//具体策略2

class IngredientsStrategy2 : IIngredientsStrategy

{

public void AddIngredients()

{

Console.WriteLine("添加配料2");

}

}

//上下文

class Dessert

{

private IIngredientsStrategy _ingredientsStrategy;

public Dessert(IIngredientsStrategy strategy)

{

this._ingredientsStrategy = strategy;

}

//设置策略

public void SetStrategy(IIngredientsStrategy strategy)

{

this._ingredientsStrategy = strategy;

}

//添加配料

public void AddIngredients()

{

_ingredientsStrategy.AddIngredients();

}

}

在上述代码中,IIngredientsStrategy接口即为抽象策略,它包含了一个添加配料的方法。然后,我们根据具体的配料类型定义了两个具体策略类:IngredientsStrategy1和 IngredientsStrategy2。最后,我们将甜点定义为上下文,它包含了一个策略,并在需要添加配料时调用策略类的方法。

3.3 测试代码

static void Main()

{

Dessert dessert = new Dessert(new IngredientsStrategy1());

//当温度小于60度时添加配料1

dessert.AddIngredients();

dessert.SetStrategy(new IngredientsStrategy2());

//当温度大于等于60度时添加配料2

dessert.AddIngredients();

}

在此,我们使用了策略模式来解决了小明的问题,他现在能够在不同的状态下轻松更换配料的类型。

4. 总结

策略模式是一种非常常用的设计模式,它将算法的变化独立于使用算法的客户端,从而降低了各个类之间的耦合度。在实际开发中,我们经常会遇到需要使用不同算法的情况,这时候就可以使用策略模式来灵活的处理多种情况。

后端开发标签