惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
L
LangChain Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Announcements
Recent Announcements
大猫的无限游戏
大猫的无限游戏
罗磊的独立博客
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
博客园 - 叶小钗
I
InfoQ
MyScale Blog
MyScale Blog
H
Help Net Security
月光博客
月光博客
Vercel News
Vercel News
B
Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
D
DataBreaches.Net
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
N
Netflix TechBlog - Medium
宝玉的分享
宝玉的分享
WordPress大学
WordPress大学
GbyAI
GbyAI
Blog — PlanetScale
Blog — PlanetScale
博客园 - Franky

博客园 - 宝气狗

【摄影】2008年06月07日西塘 【摄影】2008年05月24日大明山 2007年11月——感受黄山,天下无山。 将基础数据类型与字节数组相互转换 托管/非托管类型对照 【数据库】遍历XML根下的一级节点 - 宝气狗 - 博客园 Enterprise Library中缓存过期策略探究 css中的nowrap 2007年9月15日 九溪-五云山-梅家坞之行 宝气狗的新闻博开始使用http://webbased.cn [设计模式] 15.Command 命令模式 [设计模式] 22.State 状态模式 值类型装箱拆箱需要注意的地方 CLR如何控制类型中字段的布局 MSIL指令速查 内存一致性问题(续一) 内存一致性问题 如何循序渐进向DotNet架构师发展 关于将Queue中的数据拼接成xml的经验
[设计模式] 23.Strategy 策略模式
宝气狗 · 2007-08-13 · via 博客园 - 宝气狗

我的理解:
策略模式就是将类中可能在今后存在变化的方法抽象出来(形成一个抽象的策略类或者接口),
今后不管方法如何变化,或者有多少种方法,都实现这个策略类或者接口就可以了
类要调用哪种方法,只需在运行时申明一下采用哪种方法就可以了。

PS:其实.net中的集合类的排序运算就是用的这种模式。
List.Sort (IComparer)
在Sort时,传入实现了IComparer接口的排序类就可以了。

class App
{
 
static void Main()
 
{
  
//假设这辆车我使用CarRunA的策略进行Run的动作
  Car car1 = new Car(new CarRunA());
  car1.Run();

  
//假设这辆车我使用CarRunB的策略进行Run的动作
  Car car2 = new Car(new CarRunB());
  car2.Run();
 }

}

 //实例类,调用策略中的方法。具体方法在实例化时给出。

public class Car
{
 CarRun _carRun;
 
public Car(CarRun carRun)
 
{
  _carRun 
= carRun;
 }

 
public void Run()
 
{
  _carRun.Run();
 }

}

//策略类,将方法抽象出来,以便可以扩充出多种方法,例如:CarRunA和CarRunB

public abstract class CarRun
{
 
protected abstract void Run();
}

//实现策略类中的抽象方法。策略A

public class CarRunA : CarRun
{
 
public override void Run()
 
{
  Console.WriteLine(
"CarRun by A");
 }

}

//实现策略类中的抽象方法。策略B

public class CarRunB : CarRun
{
 
public override void Run()
 
{
  Console.WriteLine(
"CarRun by B");
 }

}