2.1 什么是策略模式
策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
2.2 策略模式包含角色
—抽象策略角色(strategy): 策略类,通常由一个接口或者抽象类实现。
—具体策略角色(ConcreteStrategy):包装了相关的算法和行为。
—环境角色(Context):持有一个策略类的引用,最终给客户端调用
2.3 策略模式UML图
Strategy为抽象类或接口 定义算法方法,然后由ConcreteStategyA来实现具体的算法,而Context维护着Strategy的实例根据客户端来决定调用哪个子类的方法。
三 策略模式代码
抽象策略类定义公共的方法
/// <summary>
/// 抽象策略类
/// 此抽象类提供统一接口或抽象方法
/// </summary>
abstract class Strategy
{
public abstract void PrintName();
}
具体算法类也可以说是 具体策略类 主要是对算法的具体实现
/// <summary>
/// 具体算法实现类
/// </summary>
class ConcreteStrategyA:Strategy
{
public override void PrintName()
{
Console.WriteLine("这是具体策略类A");
}
}
class ConcreteStrategyB:Strategy
{
public override void PrintName()
{
Console.WriteLine("这是具体策略类B");
}
}
class ConcreteStrategyC:Strategy
{
public override void PrintName()
{
Console.WriteLine("这是具体策略类C");
}
}
Context类维护一个Strategy的实例与Strategy之间交互和数据传递
/// <summary>
/// Context 对象 维护对Strategy对象的引用
/// </summary>
class StrategyContent
{
private Strategy _strategy;
public StrategyContent(Strategy strategy)
{
this._strategy = strategy;
}
public void PrintStrategryMethod()
{
_strategy.PrintName();
}
}
客户端类
/// <summary>
/// Client
/// </summary>
class Program
{
static void Main(string[] args)
{
//将具体类的实例传入Context中
StrategyContent a = new StrategyContent(new ConcreteStrategyA());
StrategyContent b = new StrategyContent(new ConcreteStrategyB());
StrategyContent c = new StrategyContent(new ConcreteStrategyC());
a.PrintStrategryMethod();
b.PrintStrategryMethod();
c.PrintStrategryMethod();
Console.Read();
}
}
结果如下:

进一步优化
策略模式写完后会发现,判断用哪个实例的逻辑又回到客户端去了,对于变化我们提倡要进行封装,那怎么处理呢 答案就是 把简单工厂与策略模式结合
只要修改如下两个类即可
1 Context类 注释部分为原来写法
/// <summary>
/// Context 对象 维护对Strategy对象的引用
/// </summary>
class StrategyContent
{
Strategy _strategy;
//public StrategyContent(Strategy strategy)
//{
// this._strategy = strategy;
//}
//用工厂模式处理
public StrategyContent(string type)
{
switch (type)
{
case "A":
_strategy = new ConcreteStrategyA();
break;
case "B":
_strategy = new ConcreteStrategyB();
break;
case "C":
_strategy = new ConcreteStrategyC();
break;
}
}
public void PrintStrategryMethod()
{
_strategy.PrintName();
}
}
2 客户端类 用了简单工厂后已经把判断的逻辑封装到了工厂类中,所以客户端中不再有判断的逻辑, 也就符合了面向对象中的 封装变化 特征。
/// <summary>
/// Client
/// </summary>
class Program
{
static void Main(string[] args)
{
//将具体类的实例传入Context中
//StrategyContent a = new StrategyContent(new ConcreteStrategyA());
//StrategyContent b = new StrategyContent(new ConcreteStrategyB());
//StrategyContent c = new StrategyContent(new ConcreteStrategyC());
//a.PrintStrategryMethod();
//b.PrintStrategryMethod();
//c.PrintStrategryMethod();
Console.Write("输入A,B,C\r\n");
string result = Console.ReadLine();
StrategyContent instance = new StrategyContent(result);
instance.PrintStrategryMethod();
Console.Read();
}
}
结果如下

四 总结
设计模式 先熟悉 再熟练 最后灵活运用!
分享到:
相关推荐
在本文中,我们将详细介绍如何使用策略模式在SpringBoot项目中实现业务逻辑处理。 策略模式的定义 策略模式是一种行为设计模式,它允许开发者定义一些策略族,分别封装起来,每一个策略中的算法具有一定的独立性,...
本示例将详细介绍如何通过两种方法实现策略模式:一种是通过Map存储方式,另一种是通过配置文件加反射方式。 首先,我们理解策略模式的基本结构。策略模式包含三个主要角色:策略接口(Context)、具体策略类...
《设计模式之禅》第35章介绍了工厂方法模式与策略模式的结合运用,旨在通过一个具体的案例——“一卡通”交易系统的设计,来展现如何在实际项目中灵活运用这两种设计模式,以达到代码的可扩展性和易维护性。...
在《Head First设计模式》这本书中,第一章通过一个鸭子的例子来介绍策略模式。这个例子中,有各种各样的鸭子(例如:红头鸭、橡皮鸭等),每种鸭子的行为(如叫声、游泳、飞)可能会有所不同。这些不同的行为可以...
《HeadFirst策略模式》是设计模式领域的一本经典著作,其第一章主要介绍了策略模式的基本概念、原理以及在C++中的具体实现。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。这种模式允许我们用不同的...
在Head First设计模式这本书中,作者用生动易懂的方式介绍了策略模式,包括鸭子的例子,帮助读者更好地理解和应用这种模式到实际项目中。通过分析压缩包中的"Duck"文件,你可以进一步了解这个模式在具体代码中的实现...
在《设计模式-策略者》这篇文章中,作者深入浅出地介绍了策略模式的基本概念、结构和实现方式。文章可能涵盖了以下几个关键知识点: 1. **模式定义**:策略模式允许在运行时选择不同的算法或策略,提供了一种用面向...
在这个项目中,我们将深入探讨如何利用Spring Boot和策略模式来实现多种文件存储方式,包括本地存储和MinIO云存储,并介绍如何设计一个可自定义扩展的架构。 ### Spring Boot简介 Spring Boot的核心优势在于其...
策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在策略模式中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为模式。 在策略模式中,我们创建表示各种策略的对象和一个行为根据...
在HeadFirst的《设计模式》一书中,作者以通俗易懂的方式介绍了各种设计模式,包括策略模式,适合初学者和有经验的开发者深入理解设计模式的原理和应用。通过阅读这本书,我们可以更好地掌握如何在实际项目中灵活...
第一章重点介绍了策略模式,这是一种行为设计模式,它使你能在运行时改变对象的行为。策略模式的核心思想是定义一系列的算法,并将每一个算法封装起来,使它们可以相互替换,让算法独立于使用它的客户。 策略模式的...
策略模式介绍 策略模式是一种行为型设计模式,它使得算法可以独立于使用它的客户端而变化。具体来说,策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法...
2、爪哇语言抽象工厂创立性模式介绍 3、工厂方法创立性模式介绍 4、单态创立性模式介绍 5、单态创立性模式介绍 6、观察者模式介绍7、责任链模式 8、设计模式之Observer 9、设计模式之Strategy(策略) 10、设计模式之...
《深入浅出设计模式》是设计模式领域的一本经典著作,其第一章就详细介绍了策略模式。策略模式的核心思想是定义一系列算法,并将每一个算法封装起来,使它们可以相互替换。这样,算法的变化就不会影响到使用算法的...
《PHP设计模式介绍》第七章 策略模式 《PHP设计模式介绍》第八章 迭代器模式 《PHP设计模式介绍》第九章 观测模式 《PHP设计模式介绍》第十章 规范模式 《PHP设计模式介绍》第十一章 章代理模式 《PHP设计模式...
Head First 设计模式这本书以其独特的教学方式深入浅出地介绍了设计模式,策略模式也不例外。书中通过生动的例子和幽默的插图,帮助读者理解策略模式的概念和应用。例如,书中可能会用到一个简单的游戏策略类,比如...
本文将重点介绍标题中提到的五种设计模式:建造者模式、代理模式、观察者模式、策略模式以及状态模式。 **1. 建造者模式(Builder)** 建造者模式是一种创建型设计模式,它允许我们分步骤构建复杂对象,而无需暴露...
#### 六、策略模式介绍 策略模式定义了一系列算法,并将每一个算法封装起来,使它们可以互相替换。策略模式让算法的变化独立于使用算法的客户。 1. **应用场景**:当一个系统需要根据不同的条件选择不同的行为时,...
【策略模式介绍】 策略模式是一种行为型设计模式,它允许在运行时选择不同的算法或策略。策略模式包括三个主要角色:环境类、抽象策略类和具体策略类。环境类负责执行策略,持有对抽象策略类的引用;抽象策略类定义...
在现实生活中,策略模式的例子也非常常见,例如,中国的所得税,分为企业所得税、外商投资企业或外商企业所得税和个人所得税, 针对于这3种所得税,针对每种,所计算的方式不同,个人所得税有个人所得税的计算方式,...